Comment puis-je rechercher une Websphere MQ message sans l'enlever?

Je suis en train d'écrire une .NET Windows Forms application qui vous permettra d'envoyer un message à un Websphere MQ file d'attente et d'interroger une autre file d'attente pour une réponse. Si une réponse est renvoyée, l'application sera partiellement processus de la réponse en temps réel. Mais la réponse doit rester dans la file d'attente pour qu'un lot quotidien de travail, qui se lit aussi à partir de la file d'attente de réponse, peut faire le reste du traitement.

J'ai été aussi loin que la lecture du message. Ce que je n'ai pas été en mesure de savoir comment le lire sans le supprimer.

Voici ce que j'ai obtenu jusqu'à présent. Je suis un MQ newbie, donc toutes les suggestions seront appréciées. Et n'hésitez pas à réagir en 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

REMARQUE: je n'ai pas vérifié que mon code fait supprime le message. Mais c'est comme ça que je comprends MQ pour travailler, et cela semble être ce qui se passe. Veuillez me corriger si ce n'est pas le comportement par défaut.

+1 - je souhaite que j'avais découvert à cette question avant que j'ai eu à le comprendre par moi-même.

OriginalL'auteur John M Gant | 2009-06-24