Java RabbitMQ+;Spring集成。队列大小1,仅在重写时删除

Java RabbitMQ+;Spring集成。队列大小1,仅在重写时删除,java,rabbitmq,spring-integration,amqp,spring-integration-amqp,Java,Rabbitmq,Spring Integration,Amqp,Spring Integration Amqp,我现在想知道,是否有可能通过RabbitMQ和Spring集成实现这一想法: 一个队列,具有1条消息的容量 消费者将请求此消息,如果该消息存在于队列中,则会将其传递给他们,如果不存在,则会得到null或错误 此消息(如果存在于队列中)不会因已下载而被删除,仅当生产者将另一条新消息放入队列时才会被删除 致以最良好的祝愿 类似这样: @Transactional public Message getMessageFromQueue(String queue) { try {

我现在想知道,是否有可能通过RabbitMQ和Spring集成实现这一想法:

  • 一个队列,具有1条消息的容量
  • 消费者将请求此消息,如果该消息存在于队列中,则会将其传递给他们,如果不存在,则会得到null或错误
  • 此消息(如果存在于队列中)不会因已下载而被删除,仅当生产者将另一条新消息放入队列时才会被删除
  • 致以最良好的祝愿

    类似这样:

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

    使用事务作用域,我们将轮询事务中的队列。使用
    setRollbackOnly()
    我们回调TX,因此将消息返回队列。

    给我一个异常:org.springframework.transaction.notTransactionException:scopeRight中无事务方面管理的事务状态,您必须在应用程序上下文中执行
    @EnableTransactionManagement
    ,首先:是的,下次。我对你的问题投了赞成票:也许你已经被允许接受答案了。一般问题是,有类似问题的人如果看到一个被接受的答案,就会考虑解决方案。现在看来,至少允许我参与meta。我将继续参与以获得更多权限。谢谢你的建议和投票