我正在编写一个 .NET Windows 窗体应用程序,它将向 Websphere MQ 队列发布消息,然后轮询不同的队列以获取响应。如果返回响应,应用程序将实时部分处理该响应。但响应需要保留在队列中,以便每日批处理作业(也从响应队列中读取)可以完成其余的处理。
我已经读完这条消息了。我一直无法弄清楚如何在不删除它的情况下阅读它。
这是我到目前为止所得到的。我是 MQ 新手,所以任何建议将不胜感激。请随意使用 C# 进行回复。
Public Function GetMessage(ByVal msgID As String) As MQMessage
Dim q = ConnectToResponseQueue()
Dim msg As New MQMessage()
Dim getOpts As New MQGetMessageOptions()
Dim runThru = Now.AddMilliseconds(CInt(ConfigurationManager.AppSettings("responseTimeoutMS")))
System.Threading.Thread.Sleep(1000) 'Wait for one second before checking for the first response'
While True
Try
q.Get(msg, getOpts)
Return msg
Catch ex As MQException When ex.Reason = MQC.MQRC_NO_MSG_AVAILABLE
If Now > runThru Then Throw ex
System.Threading.Thread.Sleep(3000)
Finally
q.Close()
End Try
End While
Return Nothing 'Should never reach here'
End Function
NOTE:我尚未验证我的代码是否确实删除了该消息。但这就是我对 MQ 工作方式的理解,而且这似乎就是正在发生的事情。如果这不是默认行为,请纠正我。
您需要使用 MQOO_BROWSE 选项打开队列。然后,在第一次读取时,您使用 MQGMO_BROWSE_FIRST 选项执行 GET。最后,后续的 GET 应使用 MQGMO_BROWSE_NEXT 选项。
注意:MQOO 是 MQ 打开选项,MQGMO 是 MQ 获取消息选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)