【发布时间】:2011-03-28 11:47:15
【问题描述】:
目前,我有一个 C# 服务正在从队列中读取消息(Websphere MQ)并将它们写入数据库。 每次我执行 GET 时,消息都会从队列中消失。我想要一个额外的功能。我更喜欢从队列中读取消息并仅在数据库写入成功后将其从队列中删除。请注意,我在多线程应用程序中执行所有这些操作。我知道有一种方法可以浏览队列,但这并不能真正提供我需要的功能。
【问题讨论】:
目前,我有一个 C# 服务正在从队列中读取消息(Websphere MQ)并将它们写入数据库。 每次我执行 GET 时,消息都会从队列中消失。我想要一个额外的功能。我更喜欢从队列中读取消息并仅在数据库写入成功后将其从队列中删除。请注意,我在多线程应用程序中执行所有这些操作。我知道有一种方法可以浏览队列,但这并不能真正提供我需要的功能。
【问题讨论】:
我正在编写我的第一个 WMQ 应用程序,我知道我很快就会遇到这个问题,所以我找到了你的问题。
我在其他论坛找到了这个http://www.mqseries.net/phpBB2/viewtopic.php?t=43043&sid=11ad2d587dbd19056836ccc3f8943e5f(打开队列时指定MQOO_BROWSE选项),我还没有尝试过,但它认为值得一试......
[]的
【讨论】:
我在 C++ 中实现了类似的功能。希望这对您或某人有所帮助。
您可以使用选项MQGMO_BROWSE_FIRST 和MQGMO_BROWSE_NEXT 浏览消息而不将它们从队列中删除。
How do I browse a Websphere MQ message without removing it?
将消息标识符存储在列表或任何其他合适的数据结构中。 将消息写入数据库。
然后在没有 BROWSE 选项的情况下正常从队列中获取消息。 ImqQueue::Get 有两个参数:options 和 ImqMessage。在调用 get 之前将消息标识符设置为 ImqMessage-class。 ImqMessage 充当过滤器。你可以选择 只有那些已成功写入数据库的消息。
【讨论】: