gpt4 book ai didi

java - Infinispan远程查询服务器编码器问题

转载 作者:行者123 更新时间:2023-12-01 11:20:36 38 4
gpt4 key购买 nike

我正在使用 Infinispan 7.0.2.Final,但我的行为非常奇怪。

我使用 infinispan 在服务器和客户端之间使用 ininispan DSL 进行远程查询,由于某种原因服务器没有返回结果列表,但结果大小不为零。

我正在谈论的行为由以下代码表示。执行以下代码后:

    Query query = qf.from(CacheEntity.class).having("ID").like("%AI%").toBuilder().build();
System.out.println("size: "+query.getResultSize());
System.out.println("result: "+query.list());

我得到这个输出:

size: 2000
result: []

这很奇怪,因为结果显然没有 2000 个元素:)

我通过以下方式设置客户端:

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-main.xml");
RemoteCacheManager manager = ((RemoteCacheManager) context.getBean("cacheManager"));

RemoteCache cache = manager.getCache("cache");
SerializationContext srcCtx = ProtoStreamMarshaller.getSerializationContext(manager);
FileDescriptorSource fds = new FileDescriptorSource();
fds.addProtoFiles("entity.proto");
srcCtx.registerProtoFiles(fds);

srcCtx.registerMarshaller(new CachedEntityMarshaller());

RemoteCache<String, String> metadataCache = manager.getCache("___protobuf_metadata");
metadataCache.put("entity.proto", new InfinispanClientApplication().read("/entity.proto"));
MarshallerRegistration.registerMarshallers(ProtoStreamMarshaller.getSerializationContext(manager));

服务器端:

     HotRodServerConfiguration build = new HotRodServerConfigurationBuilder().
host("127.0.0.1").
port(11222).
build();
HotRodServer server = new HotRodServer();
server.start(build, cacheManager);

我还注意到,每次写入时都会调用 EntityMarshaller 上的 writeTo 方法,但从未调用 readTo 方法。

我目前陷入困境,任何帮助将不胜感激。

非常感谢!

解决方案:

除了“最佳答案”回复之外。我正在使用 spring (SpringEmbeddedCacheManagerFactoryBean) 配置 infinispan 缓存。我使用 org.infinispan.configuration 类迁移到 java 配置。之后,我按照“最佳答案”中的建议进行操作,彻底解决了问题。

最佳答案

我不确定这确实是您遇到麻烦的原因,但启动独立 HotRodServer 时的一个常见问题是您没有正确指定数据容器等效函数:

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.dataContainer()
.keyEquivalence(new AnyServerEquivalence())
.valueEquivalence(new AnyServerEquivalence());
cacheManager.defineConfiguration("cache", builder.build());

请确保您为此缓存使用上面的代码。

关于java - Infinispan远程查询服务器编码器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271675/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com