gpt4 book ai didi

redis - Camel Redis 组件订阅 channel 不工作

转载 作者:可可西里 更新时间:2023-11-01 11:22:33 26 4
gpt4 key购买 nike

我有一个监听 Redis channel 的简单路由。由于某种原因,它不起作用。这是我的路线。我验证了数据正在发布到 Redis channel ,我可以使用普通的 Jedis 订阅者读回它。我在 Jetty 中运行 Camel,它被部署为一场 war 。

public class RedisSubscriberRoute extends RouteBuilder{

@Override
public void configure() throws Exception {

from("spring-redis://localhost:6379?command=SUBSCRIBE&channels=mychannel")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String res = exchange.getIn().getBody().toString();
System.out.println("************ " + res);
exchange.getOut().setBody(res);
}
})
.to("log:foo");
}

更新(2013 年 5 月 10 日美国东部时间上午 9:56):添加版本信息

    <properties>
<spring.version>3.2.2.RELEASE</spring.version>
<camel.version>2.11.0</camel.version>
<jetty.version>7.6.8.v20121106</jetty.version>
</properties>

Redis服务器版本为2.6.11

示例 git 项目在这里。 https://github.com/soumyasd/camelredisdemo

2013 年 5 月 10 日(美国东部时间晚上 10:18)更新:

正如下面评论中所建议的,我将 spring-data 的版本更改为 1.0.0.RELEASE。看起来消息正在发送给订阅者,但我仍然遇到异常。

java.lang.RuntimeException: org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.StreamCorruptedException: invalid stream header: 77686174
at org.apache.camel.component.redis.RedisConsumer.onMessage(RedisConsumer.java:73)[camel-spring-redis-2.11.0.jar:2.11.0]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.executeListener(RedisMessageListenerContainer.java:242)[spring-data-redis-1.0.0.RELEASE.jar:]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.processMessage(RedisMessageListenerContainer.java:231)[spring-data-redis-1.0.0.RELEASE.jar:]
at org.springframework.data.redis.listener.RedisMessageListenerContainer$DispatchMessageListener$1.run(RedisMessageListenerContainer.java:726)[spring-data-redis-1.0.0.RELEASE.jar:]
at java.lang.Thread.run(Thread.java:680)[:1.6.0_45]

最佳答案

使用 v 1.0.3.RELEASE 的消费者有一些问题,请改用 1.0.0.RELEASE。

您遇到的异常有所不同:Camel 生产者使用 Spring RedisTemplate,后者又使用 JdkSerializationRedisSerializer。为了使其对称,消费者默认情况下还使用 JdkSerializationRedisSerializer 来反序列化数据。因此,如果您使用 Camel producer 发布数据,它应该可以正常工作而无需喧嚣。但是,如果您使用其他 redis 客户端(或者在您的情况下是其他一些库)将数据发布到 redis,则必须为消费者使用另一个序列化程序。很长的解释,但要让它起作用实际上是两行:

from("spring-redis://localhost:6379?command=SUBSCRIBE&channels=mychannel&serializer=#serializer")

关于redis - Camel Redis 组件订阅 channel 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428371/

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