运行 spring-cloud-stream-samples 时的一些问题
Some problems when running 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 : 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
您的 ConverterConfig
似乎没有被接听。在示例中,所有配置 classes 都在与 @SpringBootApplication
main class TypeConversionApplication.java
相同的包中,以便对所有 classes 在那个包里。您需要确保转换器在您的 Sink 应用程序的上下文中。
我认为问题在于您尝试将 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
.
的转换器
我运行申请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 : 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
您的 ConverterConfig
似乎没有被接听。在示例中,所有配置 classes 都在与 @SpringBootApplication
main class TypeConversionApplication.java
相同的包中,以便对所有 classes 在那个包里。您需要确保转换器在您的 Sink 应用程序的上下文中。
我认为问题在于您尝试将 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
.