2

我们需要一个 API,它允许通过 MSMQ 消息队列进行异步更新,我将它放在一起,这将允许使用 API 的开发人员为每条消息指定不同的重试策略。因此,高优先级客户端系统(例如,用于销售)将提交所有消息,每次尝试发送(重试)5 次,每次尝试间隔 15 分钟,而低优先级客户端系统(例如后端邮件发送系统)将允许用户更新他们的营销偏好, 提交消息,重试 3 次,每次尝试间隔一小时。

System.Messaging MSMQ(版本 3 或 4)实现中是否有办法指定重试次数、重试延迟以及消息是发送到死信队列还是只是删除之类的事情?(如果是的话,怎么做?)

如果它们满足此要求,我将愿意使用其他消息传递框架。

4

1 回答 1

2

System.Messaging MSMQ(版本 3 或 4)实现中有没有办法指定重试次数

根据您使用的操作系统/msmq 版本,指定重试语义在 WCF 中非常复杂。以下是使用事务队列的 Windows 2008 和 MSMQ4。

绑定的主要设置称为MaxRetryCycles。一个重试周期是尝试从队列中成功读取消息并在处理方法中对其进行处理。这个“尝试”实际上可以由多个尝试组成,如 msmq 绑定属性ReceiveRetryCount所定义。ReceiveRetryCount 是应用程序在回滚出队事务之前尝试读取并处理消息的次数。这标志着一个重试周期的结束。

您还可以使用RetryCycleDelay属性在周期之间引入延迟。

一个更复杂的考虑是如何处理即使在多次重试循环之后仍然失败的消息。

允许使用 API 的开发人员为每条消息指定不同的重试策略

我不确定如何使用 MSMQ 做到这一点 - 据我所知,只能在每个端点的基础上设置重试语义。如果您使用事务,那么您甚至不能允许 API 用户设置正在发送的消息的优先级(事务队列保证按顺序传递)。

您唯一能做的就是托管您的 API 的另一个实例作为高优先级和一个低优先级。这些可以托管在不同的环境中,这具有额外的好处,即低优先级消息不会与高优先级消息竞争系统资源。

希望这可以帮助。

于 2013-08-06T10:07:44.583 回答