私は、Websphere MQ キューにメッセージを投稿し、応答のために別のキューをポーリングする .NET Windows Forms アプリケーションを作成しています。応答が返された場合、アプリケーションはリアルタイムで応答を部分的に処理します。ただし、応答キューからも読み取る毎日のバッチ ジョブが残りの処理を実行できるように、応答はキューにとどまる必要があります。
メッセージを読むところまで来ました。私が理解できなかったのは、それを削除せずに読む方法です。
これが私がこれまでに得たものです。私は 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
注:私のコードが実際にメッセージを削除することを確認していません。しかし、それが MQ が機能することを私が理解している方法であり、それが起こっていることのようです。それがデフォルトの動作でない場合は、修正してください。