【发布时间】:2019-08-27 08:57:08
【问题描述】:
我创建了一个流,它使用来自 RabbitMQ 的消息,然后使用路由器按类型分配给适当的服务。
服务中的方法采用参数Message<?>,因为我需要在那里使用标头。但在这种方法中,我只收到java.lang.String 类型的消息有效负载,而不是org.springframework.messaging.Message 和
我收到错误java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.messaging.Message。
Payload 不适合我,因为我需要从消息中获取标头。
@Bean
public IntegrationFlow testFlow(String queueName,
ConnectionFactory connectionFactory,
Service1 service1,
Service2 service2) {
SimpleMessageListenerContainer consumerListener = new SimpleMessageListenerContainer(connectionFactory);
consumerListener.addQueueNames(queueName);
return IntegrationFlows.from(Amqp.inboundAdapter(consumerListener))
.transform(s -> s, ConsumerEndpointSpec::transactional)
.<Message<?>, String>route(HeadersUtil::getType, m -> m
.subFlowMapping(Type.SERVICE_1, sf -> sf.handle(service1::handleProcedure))
.subFlowMapping(Type.SERVICE_2, sf -> sf.handle(service2::handleProcedure)))
.get();
}
方法handleProcedure的签名如下:
void handleProcedure(Message<?> message)
我希望在方法 handleProcedure 中获得 Message 的标头,但现在我得到了异常。
【问题讨论】:
标签: spring-integration spring-integration-dsl spring-integration-amqp