如何在不删除Websphere MQ消息的情况下浏览它?

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.