我有一个多服务部署,其中一些服务使用Hazelcast进行缓存。在实际部署中,服务驻留在单独的VM中,hazelcast实例在端口5701上启动。但是,在本地执行测试时,所有服务都驻留在同一VM上。这意味着第一个Hazelcast实例在5701上启动,第二个在5702上启动,依此类推(在配置中将自动增量设置为true)。
问题是hazelcast客户端尝试连接到5701到5703并且不再搜索。
为了确保端口没有任何重叠(因此没有自动增量),我手动配置了Hazelcast实例的端口。因此,对于其中一个服务,我将其设置为5710.但是,客户端尝试从5701连接。
我已经读过网络>端口不能用于Hazelcast客户端配置,但是我找不到如何指定尝试连接的端口?
我正在使用Hazelcast 3.6
配置文件:
<group>
<name>myNode</name>
<password>MyPass</password>
</group>
<properties>
<property name="hazelcast.rest.enabled">true</property>
<property name="hazelcast.shutdownhook.enabled">false</property>
</properties>
<management-center enabled="false"/>
<network>
<port auto-increment="true">5701</port>
<join>
<multicast enabled="true"/>
<tcp-ip enabled="false"/>
<aws enabled="false"/>
</join>
</network>
答案 0 :(得分:0)
您只需将地址(ip:port)传递给客户端的连接配置即可。无论如何,我想知道你在一台机器上启动这么多独立集群成员(不同集群?)的工作。
答案 1 :(得分:0)
解决方案是将群集配置添加到客户端配置xml:
Auto Comment Blocks
答案 2 :(得分:0)
对于hazelcast 4及更高版本,您可以使用以下
ClientConfig
config.getNetworkConfig()
.addAddress(HazelcastProperties.getAddress())
.setRedoOperation(true)
.setSmartRouting(true);
config.setClusterName(HazelcastProperties.getGroupName());
config.setInstanceName(HazelcastProperties.getInstanceName());
String address = HazelcastProperties.getAddress();
if (address.contains(":"))
{
String port = address.substring(address.indexOf(":" + 1));
config.getNetworkConfig()
.addOutboundPort(Integer.parseInt(port));
}
else
{
config.getNetworkConfig()
.addOutboundPort(5701);
}
参考:https://docs.hazelcast.org/docs/4.0/manual/html-single/index.html#port