如何从队列中删除消息
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()
事务管理器将根据事务是提交还是回滚来确认或拒绝消息。
我有一个收到消息的代码:
@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()
事务管理器将根据事务是提交还是回滚来确认或拒绝消息。