【问题标题】:RabbitMQ + Spring Integration. Queue size 1, only deleted when overrideRabbitMQ + Spring 集成。队列大小 1,仅在覆盖时删除
【发布时间】:2017-12-14 15:55:44
【问题描述】:

我想现在是否可以使用 RabbitMQ 和 Spring 集成来实现这个想法:

  1. 一个队列,可容纳 1 条消息。
  2. 消费者会询问这条消息,如果它存在于队列中,它将被传递给他们,如果不存在,他们会得到一个空或错误。
  3. 此消息(如果存在于队列中)不会因为已经下载而被删除,只有当生产者将另一条新消息放入队列时才会被删除。

最好的问候!

【问题讨论】:

    标签: java rabbitmq spring-integration amqp spring-integration-amqp


    【解决方案1】:

    类似这样的:

    @Transactional
    public Message getMessageFromQueue(String queue) {
        try {
            return this.rabbitTemplate.receive(queue);
        }
        finally {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    

    使用事务范围,我们将在事务中轮询队列。使用setRollbackOnly(),我们回调TX,因此将消息返回到队列。

    【讨论】:

    • 给我一个例外:org.springframework.transaction.NoTransactionException:范围内没有事务方面管理的TransactionStatus
    • 对,你必须在你的应用程序上下文中@EnableTransactionManagement,首先:docs.spring.io/spring/docs/5.0.2.RELEASE/…
    • 是的,下次。想
    • 我赞成您的问题:也许您已经有权接受答案。遇到类似问题的人如果看到可接受的答案,就会考虑解决方案。
    • 现在看来至少可以让我参与meta了。我将继续参与以赢得更多权限。感谢您的建议和支持
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多