如何通过出站通道适配器传递与消息关联的对象

时间:2018-12-15 01:31:10

标签: spring-integration

我有以下内容:

[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吗?

1 个答案:

答案 0 :(得分:0)

出站通道适配器不产生输出-它们是单向的,并结束流。

您可以将toKafka设为PublishSubscribeChannel并添加第二个服务激活器;默认情况下,只有在第一个成功的情况下才会调用第二个。