Sto scrivendo un'applicazione .NET Windows Form che pubblicherà un messaggio in una coda MQ di Websphere e quindi eseguirà il polling di una coda diversa per una risposta. Se viene restituita una risposta, l'applicazione elaborerà parzialmente la risposta in tempo reale. Ma la risposta deve rimanere in coda in modo che un lavoro batch giornaliero, che legge anche dalla coda di risposta, possa fare il resto dell'elaborazione.Come si esplora un messaggio MQ di Websphere senza rimuoverlo?
Sono arrivato a leggere il messaggio. Quello che non sono stato in grado di capire è come leggerlo senza rimuoverlo.
Ecco cosa ho ottenuto finora. Sono un principiante MQ, quindi ogni suggerimento sarà apprezzato. E sentiti libero di rispondere in 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
NOTA: non ho verificato che il mio codice rimuove in realtà il messaggio. Ma è così che capisco che MQ funziona, e sembra che stia succedendo. Per favore correggimi se questo non è il comportamento predefinito.
+1 - Vorrei aver scoperto questa domanda prima che dovessi capirlo da solo. –