如何从队列中删除消息

How to remove a message from the queue

我有一个收到消息的代码:

    @Override
    public Message doInRabbit(Channel channel) throws Exception {
        GetResponse result = channel.basicGet("club-pro-not-available", false);
        if (result == null) {
            return null;
        }
        channel.basicReject(result.getEnvelope().getDeliveryTag(), true);
        return new Message(result.getBody(), propertiesConverter.toMessageProperties(
                result.getProps(), result.getEnvelope(), "UTF-8"));
    }

我在带有scheduled标志的方法中调用这个方法:

  @Scheduled(fixedDelay = 10000)
    public void sendMessageClubPro() throws IOException {
        while (true) {
            try {
                 Message message = getMessagesOfRabbit();
              Logic
            } catch (Exception e) {
                Error logic
            }
        }
    }

我想试试,如果一切成功,从队列中删除消息,但我不知道该怎么做,因为我只有消息,没有频道。我该如何解决这个问题?

P.S。也许这可以在 rabbitTemplate 的帮助下以某种方式完成,或者您可以以某种方式获得频道?我找不到例子。

您需要使用 doInRabbit() 进行所有处理,并根据处理的 success/failure 调用 basicAck()basicReject()

像这样无条件地调用 basicReject(),将始终重新排队消息。

您还可以 运行 事务中的 RabbitTemplate.receive() 事务管理器将根据事务是提交还是回滚来确认或拒绝消息。