2013-05-07 99 views
0

我有一個簡單的路由來監聽Redis頻道。由於某種原因,它無法正常工作。 這是我的路線。我驗證了數據正在發佈到Redis頻道,我可以使用普通的Jedis訂閱者閱讀它。我在Jetty內部運行駱駝,它被部署爲戰爭。Camel Redis組件訂閱不起作用的頻道

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"); 
} 

}

UPDATE(10可能2013上午09時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

UPDATE 10日,2013(下午10時18 EST):

正如意見建議下面我改變了彈簧數據的版本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] 
+0

是否使用的是駱駝和Redis的版本? – 2013-05-10 13:07:22

+0

我已經通過版本信息更新了問題以及鏈接到github上的演示項目。 – 2013-05-10 13:55:48

+0

暫時,你可以試着改變駱駝彈簧Redis的組件的驅動器的版本如下: org.springframework.data 彈簧數據redis的 1.0.0.RELEASE 2013-05-11 02:05:53

回答

1

用戶使用v 1.0.3.RELEASE時出現了一些問題,請使用1.0.0.RELEASE。

你得到的異常是不同的:駱駝生產者使用Spring RedisTemplate,而後者又使用JdkSerializationRedisSerializer。爲了使其對稱,消費者默認也使用JdkSerializationRedisSerializer來反序列化數據。所以,如果你使用駱駝製片人發佈數據,它應該工作得很好,而不是忙碌。但是,如果您使用其他redis客戶端發佈數據到redis(或者在您的案例中使用其他一些庫),則必須爲消費者使用另一個序列化程序。龍解釋,而是使之工作實際上是兩條線:

從( 「春天的Redis://本地主機:6379命令=訂閱&渠道= mychannel &串行=#串行」)

+0

我正在使用Jedis(和一個Python(redis-py)發佈到Redis通道,所以我需要在我的spring XML中添加這個序列化程序,讓我試一試 – 2013-05-11 15:48:12

+0

添加序列化程序並在camel路徑中使用它 – 2013-05-11 16:11:37

0

這裏是我爲改變這項工作而必須改變的一個總結。

  1. 正如指出的@Bilgin Ibryam - 你必須使用彈簧數據redis的(如在11月 - 2013年)

    <dependency> 
        <groupId>org.springframework.data</groupId> 
        <artifactId>spring-data-redis</artifactId> 
           <!-- IMPORTANT - as of 10-May-2013 the Redis Camel 
            component only works with version 1.0.0.RELASE --> 
        <version>1.0.0.RELEASE</version> 
    </dependency> 
    
  2. 其他版本1.0.0.RELEASE我在我的pom.xml使用的版本是

    3.2.2.RELEASE 2.11.0 7.6.8.v20121106

  3. 如果您使用Camel Redis組件發佈和使用,則不必聲明不同的序列化程序。在我的情況下,我使用Jedis從python以及普通的舊Java發佈。我不得不change as my route包括串行器,並在我的spring/camel config定義串行器。

    @覆蓋 公共無效配置()拋出異常{

    from("spring-redis://localhost:6379?command=SUBSCRIBE&channels=mychannel&serializer=#redisserializer") 
    .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"); 
    

    }

+0

有一個1.0.4版本的spring-data-redis,你是否介意測試這個版本? – 2013-05-14 06:42:21

+0

我試過了spring-data-redis的1.0.4.RELEASE,但它仍然無效。問題是。 – 2013-05-16 16:11:31

+0

感謝您的測試和報告返回 – 2013-05-16 17:56:28