我们正在IBM MQ上接收消息(使用C#和IBM WebSphere MQ 8.0.0.7 NuGet包)。
我们发现的所有接收消息的例子都是简单的,并且基于以下模式:
原理是“听”和“接收”不同。
鉴于这是一个简洁的队列,当我正在“侦听”的队列中没有可用的队列时,肯定有更好的方法来侦听队列,而不是坐在由捕获异常控制的循环中接收。
这是主要的代码/模式:
public void Start(string receiveQueueName)
{
_receiveQueueName = receiveQueueName;
_thread=new Thread(ReceiveText);
_thread.Start();
}
private void ReceiveText()
{
try
{
string responseText = null;
// First define a WebSphere MQ message buffer to receive the message
MQMessage retrievedMessage = new MQMessage();
// Set the get message options
MQGetMessageOptions gmo = new MQGetMessageOptions(); //accept the defaults
//same as MQGMO_DEFAULT
// Set up the options on the queue we want to open
int responseOptions = MQC.MQOO_INPUT_AS_Q_DEF;
using (MQQueue responseQueue =
_mqQueueManager.AccessQueue(receiveQueueName, responseOptions))
{
while (isEnabled)
{
// creating a message object
MQMessage mqMessage = new MQMessage();
try
{
responseQueue.Get(mqMessage);
// ---- DEAL WITH THE MESSAGE ----
mqMessage.ClearMessage();
}
catch (MQException mqe)
{
if (mqe.ReasonCode == 2033)
{
// ----- NO MESSAGE ------
continue;
}
else
{
throw;
}
}
}
// Close the queue
responseQueue.Close();
}
}
catch (MQException mqExOuter)
{
// ----- DEAL WITH THE ERROR -----
}
}
请注意,这里还有其他支持线程的代码,为清楚起见已将其删除。
我接受这是一个“主观”等问题,但是请考虑我对人们的专业知识很有吸引力,这对后来的读者来说是有效且重要的。