我在net6的IBM MQ中实现死信队列时有一个问题。我正在使用nuGet中的IBMMQDotnetClient库。问题是,当我们面对任何未成功提交的消息时,来自队列的消息将在while(true)中继续。我想让消息到死信队列,并继续从队列的下一个消息。我如何在.net6项目中使用死信队列来解决这个问题?
当您使用XMS时,您将获得IBM MQ XMS库对回退阈值和回退的处理。
见https://www.ibm.com/docs/en/ibm-mq/latest?topic=consumers-poison-messages-in-xms
您需要为队列设置BOTHRESH
和BOQUEUE
。这将是一个MQ管理作业。然后,当任何消息的读取尝试超过阈值时,该消息将被重新请求到回退队列。如果由于任何原因导致重新排队失败,则将消息从输入队列中删除,并将其重新排队到死信队列中,或者丢弃。
唯一需要更改的代码是在消息无法处理时发出信号。您需要启用会话的事务。
sessionWMQ = connectionWMQ.CreateSession(true, AcknowledgeMode.SessionTransacted);
提交好的消息
sessionWMQ.Commit();
回滚(并发出读失败信号)坏消息
sessionWMQ.Rollback();
首先,在https://github.com/ibm-messaging/mq-dev-patterns/tree/master/dotnet
有一组没有启用事务的XMS示例。