Joh*_*ant 7 .net message-queue ibm-mq
我正在编写一个.NET Windows Forms应用程序,它将消息发布到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
Run Code Online (Sandbox Code Playgroud)
注意:我还没有验证我的代码实际上删除了该消息.但这就是我理解MQ工作的方式,而这似乎就是正在发生的事情.如果这不是默认行为,请纠正我.
mam*_*ing 12
您需要使用MQOO_BROWSE选项打开队列.然后在第一次阅读时,使用MQGMO_BROWSE_FIRST选项执行GET.最后,您的后续GET应该使用MQGMO_BROWSE_NEXT选项.
注意:MQOO是MQ打开选项,MQGMO是MQ Get Message Options.
| 归档时间: |
|
| 查看次数: |
16113 次 |
| 最近记录: |