![](/img/trans.png)
[英]Netty: Is ChannelFuture/ChannelFutureListener guaranteed to be “per-message”?
[英]RabbitMQ DLX how to specify per-message TTL back to original queue?
我有一個無效的信件交換,按預期方式工作-當我收到一條消息時,它會去那里:
@Override
public void onMessage(Message message, Channel channel) throws Exception {
// How to specify when the message will be put back to the original queue?
// This doesn't work.
message.getMessageProperties().setExpiration("3000");
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
}
但是我找不到的是如何將消息返回到原始隊列時指定每個消息。 請指教。
當郵件用死字母表示時,將刪除到期標頭。 其次,消息不會自動從死信隊列發送回原始隊列。
聽起來您想要一個具有每個消息等待時間的重試系統。 可以完成此操作,但不能完成當前操作。
基本模式是您先確認消息,然后將其發送到“延遲”交換並排隊。 此隊列將死信交換設置為應用程序的交換。 當消息到達延遲隊列時,它將一直停留在那里,直到達到消息TTL,並在發送給您的應用程序交換之前被發送死信。 但是,當您有可變的消息到期時間時,這將不起作用。 消息會從隊列的開頭變為死信,因此過期時間較長的消息將阻止后面的過期時間較短的消息。
因此,您有多種選擇來克服此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.