Hazelcast Eureka Cloud Discovery插件无法正常工作

时间:2017-12-13 18:27:35

标签: hazelcast netflix-eureka

我们已经在我们的Spring Boot应用程序中将Hazelcast实现为嵌入式缓存,并且需要一种方法来使用群集组中的Hazelcast成员"可以动态发现彼此,以便我们不必提供可能运行Hazelcast的可能的IP地址/端口。

我们在github上遇到了这个hazelcast插件: https://github.com/hazelcast/hazelcast-eureka似乎使用Eureka作为发现/注册工具提供相同的功能。

正如本github文档中所述, hazelcast-eureka-one 库包含在我们的启动应用程序类路径中,我们还禁用了TCP-IP&多播发现并在hazelcast.xml中添加了以下发现策略:

            <discovery-strategies>
                <discovery-strategy class="com.hazelcast.eureka.one.EurekaOneDiscoveryStrategy" enabled="true">
                    <properties>
                       <property name="self-registration">true</property>
                       <property name="namespace">hazelcast</property>
                    </properties>
                </discovery-strategy>
            </discovery-strategies>

我们的应用程序还提供了配置的EurekaClient,这是我们自动装配并注入此插件实现的内容:

*

Config hazelcastConfig = new FileSystemXmlConfig(hazelcastConfigFilePath);
**EurekaOneDiscoveryStrategyFactory.setEurekaClient(eurekaClient);**
hazelcastInstance = Hazelcast.newHazelcastInstance(hazelcastConfig);

*

问题: 我们可以在同一台机器上启动我们的春季启动应用程序的2个实例,我们注意到每个应用程序都启动了嵌入在不同端口(5701,5702)上的hazelcast实例。但它似乎没有认识到在集群中运行的彼此,这是我们在第二个实例启动时在应用程序日志中看到的:

Members [1] {

    Member [10.41.70.143]:5702 - 7c42eb24-3fa0-45cb-9394-17175cc92b9c this

}

17-12-13 12:22:44.480 WARN [main] chiNode.log(LoggingServiceImpl.java:168) - [10.41.70.143]:5702 [domain-services] [3.8.2]配置种子端口是5701和簇大小是1.一些端口似乎被占用!

似乎表明两个hazelcast实例都是独立运行的,并且无法识别群集/组中的其他正在运行的实例。

此外,在重新启动后,我们会立即在两个节点上看到此异常:

*

java.lang.ClassCastException: com.hazelcast.nio.tcp.MemberWriteHandler cannot be cast to com.hazelcast.nio.ascii.TextWriteHandler
    at com.hazelcast.nio.ascii.TextReadHandler.<init>(TextReadHandler.java:109) ~[hazelcast-3.8.2.jar:3.8.2]
    at com.hazelcast.nio.tcp.SocketReaderInitializerImpl.init(SocketReaderInitializerImpl.java:89) ~[hazelcast-3.8.2.jar:3.8.2]

*

这似乎表明类路径中的hazelcast库之间存在不兼容性?

1 个答案:

答案 0 :(得分:0)

好像您的Eureka服务返回了错误的端口。 Hazelcast尝试连接到相同范围内的8080和其他端口,而Hazelcast使用5701.不完全确定为什么会发生这种情况但感觉就像是从Eureka请求错误的服务名称而最终返回HTTP(Tomcat ?!)端口而不是应该注册的单独的Hazelcast服务。