如何正确处理amqp消息然后将其发送到Spring Integratin DSL

时间:2017-05-15 04:42:25

标签: spring-integration spring-amqp spring-integration-amqp

我想处理AMQP消息,然后将其发送到另一个队列进行进一步处理。

我使用Spring集成DSL将其归档如下,

@Bean
public IntegrationFlow ocr(ConnectionFactory connectionFactory, AmqpTemplate amqpTemplate,
                           OCRService ocrService) {
    return IntegrationFlows.from(Amqp.inboundGateway(connectionFactory, NOTE_INCOMING_QUEUE)
            .concurrentConsumers(2))
            .transform(new JsonToObjectTransformer(Note.class))
            .handle(msg -> {
                // doing ocr here
                amqpTemplate.convertAndSend(NOTE_EXCHANGE, NOTE_OCRED_BINDING, note);
            })
            .get();
}

@Bean
public IntegrationFlow typeProcess(ConnectionFactory connectionFactory) {
    return IntegrationFlows.from(Amqp.inboundGateway(connectionFactory, NOTE_OCRED_QUEUE)
            .concurrentConsumers(4))
            .transform(new JsonToObjectTransformer(Note.class))
            .handle(msg -> {
                // doing some work for type processing
            }).get();
}

但是我发现当新消息在类型处理阶段处理时, NOTE_INCOMING_QUEUE 队列中的消息仍未被解除。请参见下面的rabbitmq management截图。

enter image description here

我想知道为什么即使处理程序已经成功执行, NOTE_INCOMING_QUEUE 中的消息仍然未被解包。是我的代码中弹簧集成amqp的设计还是错误的?

1 个答案:

答案 0 :(得分:1)

使用Amqp.inboundAdapter()代替网关 - 网关正在等待永远不会到达的回复。

网关用于请求/回复方案;通道适配器适用于单向场景。