我正在创建一个正在侦听MQ中的消息的Windows服务。我当前的代码似乎一遍又一遍地重新处理相同的消息。我想将此代码更改为仅开始侦听消息在当前消息完成处理后
这是我当前的代码,它保持循环相同的消息(处理消息大约需要6分钟)
protected override void OnStart(string[] args)
{
var maincode = new Thread(ProcessCode);
maincode.Name = "dud";
maincode.IsBackground = false;
maincode.Start();
}
void ProcessCode()
{
do
{
theListener.MessageReceived += new EventHandler<MessageReceivedEventArgs>(MQ_MessageReceived);
IBM.WMQ.MQMessage mqMessage = theListener.Listen("manager", "theQueue");
Thread.Sleep(5000);
} while (true);
}
答案 0 :(得分:3)
如果您已使用Listen方法接收消息。我不确定你为什么要加入MessageReceived
事件。我可能会将MQ_MessageReceived
事件重命名为HandleMessage
删除MessageReceived事件处理程序,并执行简单的操作。
void ProcessCode()
{
while(true) {
//assuming that the Listen method blocks and waits for a message to be received.
var message = theListener.Listen("manager, "theQueue");
HandleMessage(message);
}
}
另请注意,您可能需要输入一些逻辑,以便在需要关闭服务时停止处理消息。