【问题标题】:Ack messages on receipt with Spring Integration使用 Spring 集成确认收到消息
【发布时间】:2021-07-08 10:09:18
【问题描述】:

我有一个用例,我想在应用程序收到消息后立即确认消息,而不是等待流程完成。流量如下。目前简单消息监听容器配置为自动确认模式。

    @Bean
    public IntegrationFlow processAggregateEventFlow(SimpleMessageListenerContainer messageListenerContainer,
                                                         @Qualifier("errorChannel") MessageChannel eventErrorChannel) {
    
            return IntegrationFlows
                    // Create message listener container and queueEvent error channel
                    .from(Amqp.inboundAdapter(messageListenerContainer).errorChannel(eventErrorChannel))
                    .transform(new JsonToObjectTransformer(Request.class, jacksonConfiguration.jsonObjectMapper()))
                    .filter(Request.class, e -> true)
                    .handle(requestMessageHandler)
                    .get();
        }

【问题讨论】:

    标签: spring-integration spring-amqp


    【解决方案1】:

    查看 AcknowledgeMode.NONE 并阅读他们的 JavaDocs:

    public enum AcknowledgeMode {
    
        /**
         * No acks - {@code autoAck=true} in {@code Channel.basicConsume()}.
         */
        NONE,
    
        /**
         * Manual acks - user must ack/nack via a channel aware listener.
         */
        MANUAL,
    
        /**
         * Auto - the container will issue the ack/nack based on whether
         * the listener returns normally, or throws an exception.
         * <p><em>Do not confuse with RabbitMQ {@code autoAck} which is
         * represented by {@link #NONE} here</em>.
         */
        AUTO;
    

    使用MANUAL,从该 AMQP 入站通道适配器向消息中添加了几个标头:

                headers.put(AmqpHeaders.DELIVERY_TAG, deliveryTag);
                headers.put(AmqpHeaders.CHANNEL, channel);
    

    所以你可以在from(Amqp) 之后有一个.handle() 来调用 channel.basicAck(deliveryTag, false);。在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/amqp.html#amqp-inbound-ack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多