【发布时间】: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