Некоторые проблемы при запуске spring-cloud-stream-samples

Я запускаю приложение https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/stream-listener, встретил некоторые ошибки, почему?

    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]

Весь код и сведения об ошибках находятся в https://github.com/keryhu/spring-stream-transform-converter


person Kery Hu    schedule 07.04.2016    source источник


Ответы (2)


Я думаю, проблема в том, что вы пытаетесь отправить String в качестве сообщения, в то время как вы ожидаете, что оно будет преобразовано в Bar. В вашем контексте у вас есть только FooToBarConverter, поэтому вам нужно будет отправить Foo в качестве полезной нагрузки сообщения в вашем источнике.

Если ваш источник выглядит так:

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

тогда это сработает. В противном случае вам понадобится преобразователь, который преобразует String в Bar.

person Ilayaperumal Gopinathan    schedule 08.04.2016
comment
да, after changing Message<String> to Message<Foo> , работает, - person Kery Hu; 08.04.2016

Похоже, ваш ConverterConfig не принимается. В примерах все классы конфигурации находятся в одном пакете с @SpringBootApplication основным классом TypeConversionApplication.java, поэтому ComponentScan выполняется для всех классов в этом пакете. Вы должны убедиться, что преобразователь находится в контексте вашего приложения Sink.

person Ilayaperumal Gopinathan    schedule 08.04.2016
comment
очень странно, я добавляю @Configuration в ConverterConfig, почему это не может быть ComponentScan по контексту - person Kery Hu; 08.04.2016
comment
Я думаю, это потому, что ваш ConverterConfig не находится в том же пакете, что и ваш класс @SpringBootApplication. Возможно, вам придется явно добавить пакеты для сканирования компонентов. - person Ilayaperumal Gopinathan; 08.04.2016
comment
я поместил ConverterConfig в тот же пакет package demo что и @SpringBootApplication , но ошибка осталась... - person Kery Hu; 08.04.2016
comment
да, я пропустил это в вашей ветке. ComponentScan работает и для подпакетов. Так что проблема не в этом. - person Ilayaperumal Gopinathan; 08.04.2016