【发布时间】:2013-05-07 20:53:44
【问题描述】:
我有一个简单的路由来监听 Redis 频道。由于某种原因,它不起作用。 这是我的路线。我验证了数据正在发布到 Redis 频道,我可以使用普通的 Jedis 订阅者将其读回。我在 Jetty 内运行 Camel,它被部署为战争。
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 EST):添加版本信息
<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):
按照下面 cmets 的建议,我将 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]
【问题讨论】:
-
您使用的是哪个版本的 Camel 和 Redis?
-
我已经用版本信息更新了问题,并提供了 github 上演示项目的链接。
-
暂时可以试试在camel-spring-redis组件里改一下驱动版本如下:
org.springframework.data spring- data-redis 1.0.0.RELEASE -
谢谢。我更改了版本,看起来有些东西正在工作。但是,我仍然遇到一个例外。请参阅我上面的“更新 2”。
标签: redis apache-camel publish-subscribe spring-data