我试图使用C++中的HotRod库访问Infinispan Server,因为我不熟悉Java,但是却出现了Exception,并且不知道如何进行。
源代码是:
#include "infinispan/hotrod/ConfigurationBuilder.h"
#include "infinispan/hotrod/RemoteCacheManager.h"
#include "infinispan/hotrod/RemoteCache.h"
#include <iostream>
#include <string>
int main(int argc, char **argv) {
infinispan::hotrod::ConfigurationBuilder cb;
cb.addServer().host("192.168.1.1").port(11222);
infinispan::hotrod::RemoteCacheManager cm(cb.build());
infinispan::hotrod::RemoteCache<std::string, std::string> cache = cm.getCache<std::string, std::string>("dCache");
cm.start();
std::cout << cache.size() << std::endl;
cm.stop();
return 0;
}
我得到的是:
terminate called after throwing an instance of 'infinispan::hotrod::HotRodClientException'
what(): scala.MatchError: 24 (of class java.lang.Byte)
Aborted
ps。 GDB回溯表明错误发生在
std::cout << cache.size() << std::endl;
行上。 最佳答案
默认情况下,C++客户端版本8.0.0使用Hotrod协议(protocol)VERSION_24,这对于Infinispan 6.0.0来说太新了。
尝试以这种方式配置VERSION_13:
cb.addServer().host("192.168.1.1").port(11222).protocolVersion(Configuration::PROTOCOL_VERSION_13);