【问题标题】:Hazelcast topic not always delivering messages to listeners on a healthy clusterHazelcast 主题并不总是将消息传递给健康集群上的侦听器
【发布时间】:2019-04-04 23:04:43
【问题描述】:

我有一个 3 成员 Hazelcast 设置(版本 3.11)。每个成员定义一个主题,用于接收其他成员的响应:

int myServerId = ...
MessageListener<Response> listener = ...
TopicConfig cfg = new TopicConfig( "response-" + myServerId );
cfg.addMessageListener( listener );

当其他成员之一收到请求(通过单独的可靠主题)时,它会对其进行处理并发回响应:

UUID correlationId = ...
Response response = ...
ITopic<Response> responseTopic = hazelcastInstance.getTopic( "response-" + fromServerId );
responseTopic.publish( response );
LOG.debug( "Sent response fromServerId={}, toServerId={}, correlationId={}: {}", myServerId, requestingServerId, correlationId, response );

回到原始节点,我正在快速连续发送 3-5 条消息。在接收节点上,我看到那些进来、得到处理以及发布到主题的响应:

2018-10-31 13:42:45,326 DEBUG [REMOTE] (connection-2) Sent response fromServerId=2, toServerId=1, correlationId=159153cf-636d-4165-8b48-8ffcbcf33ffa: ...

但是在原始节点上,我只看到一些消息进来。有时它是 5 个中的 1 个没有成功。其他时候他们都成功了。

我尝试在配置中定义所有 3 个主题(response-1、response-2、response-3),并且只在其中一个主题(对应于 serverId)上定义一个侦听器,看似没有区别。我还尝试在启动 HazelcastInstance 后添加侦听器,但没有任何改进。

然后我将两者结合起来(定义所有主题,但在 HazelcastInstance 启动且可用时注册一个侦听器。也没有变化。

当我采用原始方法为每个成员(包括一个侦听器)定义一个主题并更改它以便我在所有成员上定义所有主题并仅在 HazelcastInstance 建立后为每个节点添加一个侦听器时,问题就消失了。

【问题讨论】:

    标签: hazelcast


    【解决方案1】:

    Hazelcast 中的常规主题不保证消息传递。相反,您可以使用ReliableTopic 功能。请在此处查看详细信息:https://docs.hazelcast.org//docs/latest/manual/html-single/index.html#reliable-topic

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多