C# 我如何知道队列何时结束,我的线程使用MQ消息
我需要使用MQ队列中的消息,然后在完成队列使用时关闭控制台应用程序。我不知道消息何时在队列中。我能够成功地进行读取,但是我不知道何时结束使用队列并使线程保持打开状态。我需要知道我怎样才能识别这个时刻C# 我如何知道队列何时结束,我的线程使用MQ消息,c#,.net,multithreading,ibm-mq,C#,.net,Multithreading,Ibm Mq,我需要使用MQ队列中的消息,然后在完成队列使用时关闭控制台应用程序。我不知道消息何时在队列中。我能够成功地进行读取,但是我不知道何时结束使用队列并使线程保持打开状态。我需要知道我怎样才能识别这个时刻 this.connection = cf.CreateConnection(); this.connection.ExceptionListener = new ExceptionListener(this.OnException); this.sessi
this.connection = cf.CreateConnection();
this.connection.ExceptionListener = new ExceptionListener(this.OnException);
this.session = this.connection.CreateSession(true, AcknowledgeMode.AutoAcknowledge); // sessão com controle de transação
IDestination destQueue = this.session.CreateQueue(filaMensagem);
this.consumer = this.session.CreateConsumer(destQueue);
// Create an AutoResetEvent for signalling between threads
using (this.receiveCompleteEvent = new AutoResetEvent(false))
{
// Create and register the listener
this.consumer.MessageListener = new MessageListener(this.OnNewMessageCallback); // Callback for message handling
// Start the connection
this.connection.Start();
// Block and wait for the receiveCompleteEvent event to be signalled.
this.receiveCompleteEvent.WaitOne();
}
// dispose receiveCompleteEvent
this.consumer.Close();
this.session.Close();
this.connection.Close();
“使用队列”并不是消息队列的正确使用场景。消息可以在任何时候到达,非常不可预测,您通常喜欢快速响应它们。因此,你会考虑永远离开这个项目。请注意,AutoResetEvent似乎设计为在只收到一条消息时退出,您肯定不希望这样。最简单的方法是使用Console.ReadLine()代替谚语中的“按Enter键继续”。在我的上下文中,这将发生在后台。我们将不会有任何用户交互。我将有一个例程,每天运行应用程序几次,并在那一刻使用队列,因此我们将使用MQ来管理消息队列。当然,没有人会喜欢等待它。在服务中执行此操作通常是正确的方法,会一直运行,直到计算机管理员认为由于某种维护操作而停止此操作是个好主意。不要使用异步消息侦听器,直接使用同步使用者即可。队列为空时,队列管理器将返回2033原因码。最佳实践通常是在这之后等待一段时间,以防在结束之前出现更多消息。其他最佳实践是,当消息显示在队列上时,让应用程序触发器再次开始读取消息。“使用队列”并不是消息队列的正确使用场景。消息可以在任何时候到达,非常不可预测,您通常喜欢快速响应它们。因此,你会考虑永远离开这个项目。请注意,AutoResetEvent似乎设计为在只收到一条消息时退出,您肯定不希望这样。最简单的方法是使用Console.ReadLine()代替谚语中的“按Enter键继续”。在我的上下文中,这将发生在后台。我们将不会有任何用户交互。我将有一个例程,每天运行应用程序几次,并在那一刻使用队列,因此我们将使用MQ来管理消息队列。当然,没有人会喜欢等待它。在服务中执行此操作通常是正确的方法,会一直运行,直到计算机管理员认为由于某种维护操作而停止此操作是个好主意。不要使用异步消息侦听器,直接使用同步使用者即可。队列为空时,队列管理器将返回2033原因码。最佳实践通常是在这之后等待一段时间,以防在结束之前出现更多消息。其他最佳实践是,当消息显示在队列上时,让应用程序触发器再次开始读取消息。