我有以下内容:
[inbound channel adapter] -> ... -> foo -> [outbound channel adapter] -> bar
我该如何编写我的spring-integration应用程序,以便foo
可以使用一个不属于[outbound channel adapter]
的消息的一部分的额外对象,以便bar
得到它? / p>
我的应用程序基本上从AWS SQS接收消息(使用spring-integration-aws
,进行一些过滤/转换,然后将消息发布到Apache Kafka(使用spring-integration-kafka
),并且仅当成功时,从SQS队列中删除原始消息。
由于这个原因,当我收到SQS消息时,我想抓住接收句柄/确认对象,将消息的其余部分转换为要发布的Kafka消息,然后,如果成功,请利用该消息接收句柄/确认对象以使原始消息出队。
所以说我正在spring-integration-kafka
文档中使用此示例代码:
@Bean
@ServiceActivator(inputChannel = "toKafka", outputChannel = "result")
public MessageHandler handler() throws Exception {
KafkaProducerMessageHandler<String, String> handler =
new KafkaProducerMessageHandler<>(kafkaTemplate());
handler.setTopicExpression(new LiteralExpression("someTopic"));
handler.setMessageKeyExpression(new LiteralExpression("someKey"));
handler.setFailureChannel(failures());
return handler;
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, this.brokerAddress);
// set more properties
return new DefaultKafkaProducerFactory<>(props);
}
使用上述方法,如果我有一条消息message
和一些其他无关的信息extra
,我该如何发送到toKafka
频道,以使handler
能够消费message
,如果成功了,result
频道会收到extra
吗?
答案 0 :(得分:0)
出站通道适配器不产生输出-它们是单向的,并结束流。
您可以将toKafka
设为PublishSubscribeChannel
并添加第二个服务激活器;默认情况下,只有在第一个成功的情况下才会调用第二个。