【问题标题】:Hazelcast Eureka Cloud Discovery Plugin not workingHazelcast Eureka Cloud Discovery 插件不起作用
【发布时间】:2018-05-27 17:53:42
【问题描述】:

我们已经将 Hazelcast 实现为我们的 Spring Boot 应用程序中的嵌入式缓存,并且需要一种方法使“集群组”中的 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);

*

问题: 我们能够在同一台机器上启动我们的 spring boot 应用程序的 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 库之间存在不兼容?

【问题讨论】:

  • 请提供完整的会员日志。
  • 这里是 hc member1 日志:1drv.ms/t/s!As1HHAnvqdAqaZ7UZEzAMX2OTfA 和 hc member2 日志:1drv.ms/t/s!As1HHAnvqdAqaje-HxkFBEw57n8
  • 更新:似乎默认自动配置的“tomcat-embed-core”依赖项(w/8.0.36 版本)导致了这个异常。更改该依赖项版本后,我不再看到该异常。但是 hazelcast 仍然无法识别集群中运行的另一个实例。

标签: hazelcast netflix-eureka


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2017-09-15
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2018-06-29
    相关资源
    最近更新 更多