2016-04-07 11 views
0

Ich habe die Anwendung https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/stream-listener, einige Fehler, warum?Einige Probleme beim Ausführen von Feder-Wolke-Strom-Proben

Sending value: hi of type class demo.domain.Foo 
2016-04-07 19:19:50.811 ERROR 76016 --- [hannel-adapter1] o.s.c.s.b.r.RedisMessageChannelBinder$2 : Failed to deliver message; retries exhausted; message sent to queue 'ERRORS:testtock.anonymous.61fc01c4-17a1-46b5-9579-286413dc45e0' 

org.springframework.messaging.converter.MessageConversionException: No converter found to convert to class demo.domain.Bar, message=GenericMessage [payload=hi, headers={contentType=text/plain, id=72274970-5e79-a8ef-d3f1-fcd4ede2fa55, timestamp=1460027990799}] 
    at org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver.resolveArgument(PayloadArgumentResolver.java:118) ~[spring-messaging-4.2.5.RELEASE.jar!/:4.2.5.RELEASE] 
    at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:98) ~[spring-messaging-4.2.5.RELEASE.jar!/:4.2.5.RELEASE] 
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:138) ~[spring-messaging-4.2.5.RELEASE.jar!/:4.2.5.RELEASE] 
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:107) ~[spring-messaging-4.2.5.RELEASE.jar!/:4.2.5.RELEASE] 
    at org.springframework.cloud.stream.binding.StreamListenerAnnotationBeanPostProcessor$StreamListenerMessageHandler.handleRequestMessage(StreamListenerAnnotationBeanPostProcessor.java:192) ~[spring-cloud-stream-1.0.0.RC1.jar!/:1.0.0.RC1] 
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:99) ~[spring-integration-core-4.2.5.RELEASE.jar!/:na] 

den gesamten Code und Fehler Details in https://github.com/keryhu/spring-stream-transform-converter

Antwort

1

Ich denke, das Problem ist, dass Sie versuchen, String als die Nachricht zu senden, während Sie erwarten, dass in Bar konvertiert werden. In Ihrem Kontext haben Sie nur FooToBarConverter, daher müssten Sie Foo als Nachrichtennutzlast in Ihrer Quelle senden.

Wenn Ihre Quelle wie folgt aussieht:

return new MessageSource<Foo>() { 
     public Message<Foo> receive() { 
      System.out.println("******************"); 
      System.out.println("At the Source"); 
      System.out.println("******************"); 
      Foo foo = new Foo(); 
      foo.setValue("hi"); 
      System.out.println("Sending value: " + foo.getValue() + " of type " + foo.getClass()); 
      return MessageBuilder.withPayload(foo).build(); 
     } 
    }; 

dann würde das funktionieren. Andernfalls benötigen Sie einen Konverter, der String in Bar konvertiert.

+0

ja, 'nach dem Ändern der Nachricht zu Nachricht ', es funktioniert, –

0

Es ist wie Ihr schaut ConverterConfig up nicht abgeholt bekommt. In den Beispielen befinden sich alle Konfigurationsklassen im selben Paket wie die @SpringBootApplication Hauptklasse TypeConversionApplication.java, so dass ComponentScan für alle Klassen in diesem Paket ausgeführt wird. Sie müssen sicherstellen, dass der Konverter im Kontext Ihrer Sink-Anwendung ist.

+0

sehr seltsam, ich füge '@ Configuration' in der' ConverterConfig', warum es nicht ComponentScan durch den Kontext sein kann –

+0

Ich denke, es ist, weil Ihre 'ConverterConfig' nicht im selben Paket wie die Ihrer' @ SpringBootApplication' Klasse. Möglicherweise müssen Sie explizit Pakete für den Komponentenscan hinzufügen. –

+0

ich 'ConverterConfig' in das gleiche Paket' Paketdemo' als '@ SpringBootApplication' setzen, aber der Fehler ist immer noch da ... –