Hazelcast节点未获得第一条发布的消息

时间:2019-02-07 07:25:50

标签: java spring hazelcast

我有两个节点。他们两个都订阅了一个话题。

当其中一个节点发布一条消息时,另一个节点第一次未收到该消息。如果该节点第二次发布消息,则另一个节点将获得该消息。

如果我在应用程序初始化阶段调用hazelcastInstance.getTopic(TopicX),则消息侦听器将根据需要工作。

我认为这与lazy-init属性有关。

有没有更可靠的方法可以解决这个问题?可靠的话题可能是解决方案?如果是这样,是否有示例代码可以用spring实现可靠的主题?

3 个答案:

答案 0 :(得分:0)

@vourla,我建议您使用ReliableTopic,因为它由RingBuffer支持,并且只要支持ringbuffer尚未满,收听者就可以正确读取第一条消息。

另外,请参阅相关文档部分:https://docs.hazelcast.org/docs/3.11.1/manual/html-single/index.html#configuring-reliable-topic

不是通过编程方式添加侦听器,而是通过配置添加它。另外,对于Topic,由于事件是触发事件而忘记了事件,因此,如果在从另一个节点触发事件之后添加侦听器,则无论是通过程序定义还是通过config进行定义,都无法使用它。 >

您还可以查看Spring相关文档部分和相关代码示例:https://github.com/hazelcast/hazelcast-code-samples/tree/master/hazelcast-integration/spring-configuration

答案 1 :(得分:0)

@ gokhan-oner,谢谢您的回答。

实际上,我一开始尝试实现可靠的主题。但是我在春季找不到示例实现。春天的语法有点不同。 现在,实现是这样完成的:

 <hz:hazelcast id="instance">
    <hz:ringbuffer name="topicX" capacity="1000" time-to-live-seconds="5"/>
    <hz:ringbuffer name="topicY" capacity="1000" time-to-live-seconds="5"/>
    <hz:reliable-topic name="topicX" topic-overload-policy="BLOCK"/>
    <hz:reliable-topic name="topicY" topic-overload-policy="BLOCK"/>
</hz:hazelcast>

但是,以声明方式实现主题侦听器无效。当上下文初始化时,我以编程方式添加了侦听器。

什么对我不起作用:

<hz:reliable-topic name="topicZ" topic-overload-policy="BLOCK">
    <hz:message-listeners>
        <hz:message-listener class-name="tr.com.test.HazelcastTopicListener"/>
    </hz:message-listeners>
</hz:reliable-topic>

工作原理:

HazelcastTopicListener hazelcastTopicListener = new HazelcastTopicListener();
HazelcastInstance hazelcastInstance = SpringIntegration.getBean(HazelcastInstance.class);
ITopic<Message> testTopic= hazelcastInstance.getTopic("topicZ");
testTopic.addMessageListener(hazelcastTopicListener );

答案 2 :(得分:0)

@vourla,请检查hazelcast-spring-XX.xsd文件。属性名称是class-or-bean-name,而不是class-name。你能像下面这样尝试吗?

<hz:reliable-topic name="topicZ" topic-overload-policy="BLOCK">
    <hz:message-listeners>
        <hz:message-listener class-or-bean-name="tr.com.test.HazelcastTopicListener"/>
    </hz:message-listeners>
</hz:reliable-topic>