当前位置: 首页 > 知识库问答 >
问题:

Hazelcast异常将布尔值放入映射

崔琦
2023-03-14

几个月前我们开始使用Hazelcast。我们最近开始在生产环境中测试它,现在大约每周看到一次这个异常:

2020-02-11 12:10:00,084upport.invokeNoDataMemberInClusterException:无法找到调用的目标!分区所有者为空,但无法分配分区,因为集群中的所有节点都是精简成员。upport.java:467upport.java:406com.hazelcast.map.impl.proxy.InvocationTarget(Impl.put)mpl.java:121com.hazelcast.map.impl.proxy.Invoke(Impl.put)mpl.java:111nvocation.invoke0(Invocation.java:534)com.hazelcast.spi.impl.operationservice.impl.nvocation.invoke(Invocation.java:236)com.hazelcast.map.impl.proxy.MapProxyScom.hazelcast.partition.操作(MapProxyScom.hazelcast.spi.impl.operationservice.impl.)nvocation.newMapProxySnvocation.java:90内部(MapProxyScom.hazelcast.spi.impl.operationservice.impl.)nvocation.initMapProxyInvocation.java:269(MapProxyIcom.hazelcast.spi.impl.operationservice.impl.)nvocation.doMapProxyInvocation.java:556(MapProxyIcom.hazelcast.spi.impl.operationservice.impl.)

这是20年2月4日发布的Hazelcast 4.0 GA。这也发生在我们跑3.12的时候。x版本。我们希望每次升级到新版本时,例外情况都会消失。

我们的设置非常简单。Hazelcast运行在一台具有大量可用内存和Java 8的服务器上。我们所做的就是将真/假值放入只有一个值为零的整数键的映射中。真的,这就像是最小的地图!服务器可以正常运行很多天,但最终会从映射中抛出此异常。put(0,布尔)。

我们代码的其他部分大量使用Hazelcast的执行器。到目前为止,我们还没有遇到任何问题。

我们这样配置Hazelcast:

config.setInstanceName(name);        

config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getAwsConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(true);
config.getNetworkConfig().setPortAutoIncrement(true);
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().getJoin().getTcpIpConfig().addMember(AppConfig.getConfigSetting("/config/server/ip_address"));

hazelcastInstance = Hazelcast.newHazelcastInstance(config);

我找不到除此之外的任何有关此异常的信息:https://docs.hazelcast.org/docs/latest/javadoc/com/hazelcast/partition/NoDataMemberInClusterException.html

希望有人能帮助解决这个问题。我们期望Hazelcast的地图在一台服务器上是防弹的。

共有1个答案

都乐逸
2023-03-14

看见https://github.com/hazelcast/hazelcast/issues/16651

该问题显然是由于在Amazon EC2实例上运行Hazelcast造成的。我们使用的配置设置需要调整以定义出站端口范围。我们最终的工作配置设置如下:

com.hazelcast.config.Config config = new com.hazelcast.config.Config();

config.setProperty("hazelcast.logging.type", "log4j");

String name = AppCluster.isWorkerServer ? "worker "+AppHTTP.getSystemDomainAndContext() : "master"; 

config.setInstanceName(name);        

config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getAwsConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(true);
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().setPortAutoIncrement(false);
config.setProperty("hazelcast.socket.bind.any", "false");

// The next line is a suggested workaround for running on Amazon AWS to avoid periodic hazelcast crashes
// https://github.com/hazelcast/hazelcast/issues/16651
config.getNetworkConfig().addOutboundPortDefinition("30000-60000");

// Default value to use when a single server
String hazelcastIP = "127.0.0.1";
if (AppCluster.isWorkerServer || AppCluster.totalServers > 1)
{
    if (AppConfig.getConfigSetting("/config/server/ec2_private_ip").length() > 0)
    {
        // If clustered and in Amazon AWS, use the server's private IP address
        hazelcastIP = AppConfig.getConfigSetting("/config/server/ec2_private_ip");
    }
    else
    {
        // If clustered and not in Amazon AWS, use the server's public IP address
        hazelcastIP = AppConfig.getConfigSetting("/config/server/ip_address");
    }
}

config.getNetworkConfig().setPublicAddress(hazelcastIP);
config.setProperty("hazelcast.local.localAddress", hazelcastIP);

hazelcastInstance = Hazelcast.newHazelcastInstance(config);
 类似资料:
  • 我公开了一个使用另一个SOAP服务的服务。我得到了JAXB生成的服务模型。当我使用服务时,数据被设置到与此模型相关的对象中。我定义了自己的域模型,它与JAXB模型具有完全相同的类集,但没有xml注释等。我使用dozer来执行数据映射。当标记为注释(nillable=true)的某些布尔元素为null时,我的域模型中的目标对象布尔对象将设置为默认的true或false值。我希望它保留相同的空值。布尔

  • 捕获异常的最近日志显示: 调用{op=com.hazelcast.map.impl.operation.getoperation{serviceName='hz:impl:mapservice',identityhash=1111111111,partitionid=78,replicaIndex=0,callid=0,invocationtime=2222222222222222,waittim

  • 问题内容: 我在MySQL表(TINYINT(1))中具有BOOLEAN类型,并且尝试映射实体中的布尔字段,但这会生成异常: 我将实体中的字段更改为字节并进行了相应的更改,因此它的作用是布尔值,我得到: 我尝试在字段上使用注释: 但我得到: 问题答案: 从我在这里读到的内容: org.hibernate.HibernateException:maegul.users中列admin的列类型错误。找到

  • 问题内容: 我有一个pojo类,其中标志之一是Boolean类型。 当此属性获取非布尔值(不是fastxml时)时,杰克逊会自动将输入值转换为。调试了几个小时后,我发现这是在setter方法中发生的。 如果此属性的输入值为非布尔值,我想传递自定义消息。我已经编写了自己的注释来验证此属性的输入值,并返回自定义消息(如果它不是布尔值,但是杰克逊在检查自定义验证器之前将其绑定)。 使用杰克逊版本>>>

  • 但是这个代码不起作用。编译器说 我在试图理解代码的问题是什么。我认为将返回一个布尔值流,我可以通过收集这些值。

  • 到目前为止我们看到的类型都能表示很大范围的数据,整数多的是,而浮点数更多。相对而言,字符集的规模小的多。C++中还有一个类型表示的范围更小,即布尔类型,它只能表示true和false两个值。 虽然没提到过该类型,但我们前面几章中实际已经使用过布尔值了。if语句和while语句中的条件就是布尔表达式。比较操作符的结果也是布尔值。例如: if (x == 5) { // 进行某些处理 } ==操