我这个场景有两个队列。 “错误”和“MyQueue”。
邮件被转储到MyQueue并从那里处理。如果失败,则会将其移至错误队列。 主管部门可能会将消息移回MyQueue以便再次处理。
我的任务是扫描/查看两个队列,以查找并计算已循环超过一小时的所有消息。
似乎
message.SentTime
message.ArrivedTime
都没用,因为每次消息进入队列时都会更新它们。
解决方法是在邮件正文中放置时间戳,但这需要我打开所有邮件以确定邮件是否“旧”。
有更好的选择吗?
答案 0 :(得分:1)
问题是它不是循环队列的相同消息。 “移动”邮件通常会删除原始邮件并根据原始内容创建新邮件,这就是您无法使用已发送和到达时间的原因。
每次移动的消息都有新的唯一MessageID值吗?如果没有,那么也许你可以生成一个匹配MessageID的表到它最初创建的时间。
干杯
John Breakwell
答案 1 :(得分:0)
您可以为此使用Message类的AppSpecific
属性。不幸的是,它是一个32位整数;如果它很长,您可以在那里存储DateTime.Ticks,然后将其用作计算消息周期所需的时间戳。
您可能会丢失Ticks中的一些位以使值适合AppSpecific,如下所示:
ticksInt = (int) DateTime.Now.Ticks >> 23;
这为您提供了第二级精度,我认为这足以满足您的需要......但是,如果您这样做,则无法使用内置的DateTime或TimeSpan方法从Ticks转换回来,因此您将拥有手动转换,或只计算Now
与此值之间的差值。