Hazelcast节点没有获得第一个发布的消息

问题描述 投票:0回答:3

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

当其中一个节点发布消息时,另一个节点不会在第一时间收到消息。如果节点第二次发布消息,则另一节点获取消息。

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

我认为这是关于lazy-init属性的。

是否有更可靠的方法不面对这个问题?可靠的话题可以解决?如果是这样,是否有任何示例代码用spring实现可靠的主题?

java spring hazelcast
3个回答
0
投票

@vourla,我建议使用ReliableTopic,因为它是由Ri​​ngBuffer支持的,只要支持ringbuffer不满,听众就可以正确阅读第一条消息。

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

不是以编程方式添加侦听器,而是通过配置添加它。此外,对于Topic,因为事件是火和忘记,如果你在从另一个节点触发事件后添加监听器,你不会得到它,无论你是以编程方式还是通过配置来定义它,但是使用ReliableTopic,两者都应该有效。

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


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 );

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>
© www.soinside.com 2019 - 2024. All rights reserved.