我正在关注这里找到的这个非常简单的示例:https://github.com/ardlema/hazelcast-pubsub/tree/master/src/main/java/org/ardlema/hazelcast
我稍微修改了一下以使用字符串:
--出版商
package org.ardlema.hazelcast;
import com.hazelcast.core.*;
import java.util.Date;
public class Publisher {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ITopic<String> topic = hz.getTopic("topic");
topic.publish("Hello World");
}
}
-- 订阅者
package org.ardlema.hazelcast;
import java.util.Date;
import com.hazelcast.core.*;
public class Subscriber {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ITopic<String> topic = hz.getTopic("topic");
topic.addMessageListener(new MessageListenerImpl());
System.out.println("Subscribed");
}
private static class MessageListenerImpl implements MessageListener<String> {
public void onMessage(Message<String> m) {
System.out.println("Received: " + m.getMessageObject());
}
}
}
我将它们作为两个独立的应用程序运行,首先运行订阅者,然后运行发布者。问题是订阅者永远不会收到发布的消息。为什么会这样?
更新:我在另一台计算机上测试了这个完全相同的代码并且它工作......但我仍然需要让它在原始计算机上工作但我仍然不确定为什么它不起作用
答案 0 :(得分:1)
很可能您的 2 个(嵌入式)Hazelcast 实例不会形成一个集群。请检查发现部分。默认情况下,Hazelcast 使用多播进行发现。您应该会在日志中看到类似的内容。
Members {size:2, ver:2} [
Member [127.0.0.1]:5701 - e40081de-056a-4ae5-8ffe-632caf8a6cf1 this
Member [127.0.0.1]:5702 - 93e82109-16bf-4b16-9c87-f4a6d0873080
]