我正在尝试创建一个简单的spring-integration应用程序,它可以提取http数据并将它们转发到两个队列。 在其中一个队列中(暂时忽略另一个)我想丰富数据,然后将它们转发给AMQP 端点。
我的问题是以下异常:
MessagingTemplate $ TemporaryReplyChannel:收到回复邮件但是 接收线程在发送时由于异常而退出 请求消息:ErrorMessage [有效载荷= org.springframework.messaging.MessageHandlingException: 嵌套异常是 org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8):方法调用:方法转换(byte [])不能 在com.EnrichmentService类型
上找到
我很确定摄取的数据是以某种方式序列化的 我的浓缩服务,即用于DTO(我的例子中的数据),无法理解。 我尝试在DTO上实现Serializable。
我的问题是,如何调试流经我频道的类型?
我的代码看起来像这样:
@Bean
public StandardIntegrationFlow ingestRaw() {
return IntegrationFlows.from(httpIngest())
.headerFilter("accept-charset", "http_requestMethod")
.publishSubscribeChannel(Executors.newCachedThreadPool(),
input -> input
.subscribe(enrichmentFlow()))
.subscribe(anotherFlow()))
.get();
}
@Bean
public IntegrationFlow enrichmentFlow(){
return flow -> flow.enrich(e -> e
.requestChannel(enrichmentRequestChannel())
.replyChannel(enrichmentReplyChannel())
.requestPayload(Message::getPayload))
.transform(Transformers.fromJson(Data.class))
.handle(Data.class, (payload, headers) -> enrichmentService.transform(payload))
.handle(amqpOutboundFlow());
}
@Bean
public HttpRequestHandlingMessagingGateway httpIngest() {
return Http.inboundGateway(SINK_ENDPOINT_PATH).get();
}
@Bean("enrichmentRequestChannel")
public DirectChannel enrichmentRequestChannel(){
return MessageChannels.direct().get();
}
@Bean("enrichmentReplyChannel")
public DirectChannel enrichmentReplyChannel(){
return MessageChannels.direct().get();
}
@Bean
public AmqpOutboundEndpoint amqpOutboundFlow() {
return Amqp.outboundAdapter(this.amqpTemplate).routingKeyExpression("enrichOut.enrichedGroup").get();
}
答案 0 :(得分:0)
我犯了一个错误并且忘记取消之前使用的绑定,因此TransformationService以两种方式绑定(至少看起来如此)。
@ServiceActivator(inputChannel = "enrichmentRequestChannel", outputChannel = "enrichmentReplyChannel")
public EnrichedData transform(Data data) {