我在同一服务器上有一个dockerized ignite实例和一个dockerized java程序。 Ignite具有由config xml定义的缓存,并且Java通过瘦客户端连接到它,并且该缓存由另一个服务填充。 Java只会触发获取键值。
一切都按预期进行,有时会出现此错误,并且重新创建Java docker已解决该问题。今天,java每次都开始显示此错误,在某些负载下运行了几秒钟之后,出现了该错误,但我无法解决。已经尝试清空缓存或停止填充缓存的服务。
以下是例外:
org.apache.ignite.internal.client.thin.ClientProtocolError: Unexpected response ID [4595132326738094176]
at org.apache.ignite.internal.client.thin.TcpClientChannel.processNextResponse(TcpClientChannel.java:284)
at org.apache.ignite.internal.client.thin.TcpClientChannel.receive(TcpClientChannel.java:234)
at org.apache.ignite.internal.client.thin.TcpClientChannel.service(TcpClientChannel.java:171)
at org.apache.ignite.internal.client.thin.ReliableChannel.service(ReliableChannel.java:180)
at org.apache.ignite.internal.client.thin.ReliableChannel.affinityService(ReliableChannel.java:242)
at org.apache.ignite.internal.client.thin.TcpClientCache.cacheSingleKeyOperation(TcpClientCache.java:509)
at org.apache.ignite.internal.client.thin.TcpClientCache.get(TcpClientCache.java:111)
at com.abc.rtpm.RtpmClient.getPrice(RtpmClient.java:63)
org.apache.ignite.internal.client.thin.ClientProtocolError: Invalid response size: -1476395008
at org.apache.ignite.internal.client.thin.TcpClientChannel.processNextResponse(TcpClientChannel.java:275)
at org.apache.ignite.internal.client.thin.TcpClientChannel.receive(TcpClientChannel.java:234)
at org.apache.ignite.internal.client.thin.TcpClientChannel.service(TcpClientChannel.java:171)
at org.apache.ignite.internal.client.thin.ReliableChannel.service(ReliableChannel.java:180)
at org.apache.ignite.internal.client.thin.ReliableChannel.affinityService(ReliableChannel.java:242)
at org.apache.ignite.internal.client.thin.TcpClientCache.cacheSingleKeyOperation(TcpClientCache.java:509)
at org.apache.ignite.internal.client.thin.TcpClientCache.get(TcpClientCache.java:111)
at com.abc.rtpm.RtpmClient.getPrice(RtpmClient.java:63)
客户端是通过以下代码创建的:
this.cfg = new ClientConfiguration().setAddresses(clientHost + ":" + clientPort);
try {
this.igniteClient = Ignition.startClient(this.cfg);
this.cache = this.igniteClient.getOrCreateCache("rtpm");
}
catch (ClientException e) {
System.err.println(e.getMessage());
}
catch (Exception e){
System.err.format("Unexpected failure: %s\n", e);
}
有多个线程同时调用get。
非常感谢您的帮助。
答案 0 :(得分:0)
我认为您使用的端口错误。您应该使用10800
或ClientConnectorConfiguration
指定的那个。
答案 1 :(得分:0)
尽管在瘦客户端文档中它表示支持多线程,但似乎无法承受负载。
我用普通客户解决了这个问题。