[英]Button click of .NET application needs to tell an external service to start processing from a queue (msmq)
我有一个与用户进行交互的asp.net Web窗体应用程序。 当用户从站点中选择某些项目并单击按钮进行处理时。 对于用户选择的每个项目,Web应用程序都会向msmq添加一条消息。
我要弄清楚的部分:
如果我的第二个应用程序的工作是处理队列(msmq),则它将是哪种类型的应用程序。 关键是第二个应用程序需要闲置,直到我的asp.net webapp告诉它单击了“处理”按钮,然后它将继续进行,检查队列并进行处理。 我不希望它每分钟左右不断检查队列,仅在命令时检查队列。
Windows服务,Web服务,Web API? 我目前有一个Windows服务,该服务每30秒检查一次队列。 如何使它按需工作而不是不断检查?
这里的措词略有不同:
用户在.NET应用程序中,然后选择项目,然后单击“处理”。
.Net应用程序将需要处理的项目添加到队列(msmq)。
.NET应用程序将告知其他应用程序,该进程按钮已单击,并且应该开始处理队列。 处理完队列后,其他应用程序应返回某种空闲模式。
这里最重要的是,我不想在每分钟检查队列中是否有项目的计时器上使用它。 这将消耗24/7运行的资源。
也许我不熟悉msmq的某些功能。 msmq是否可以通过某种方式告诉我的服务它已接收到队列中的消息,继续进行处理。 而不是我的.net应用程序正在与服务对话?
您可以使用现有的Windows服务。 但是,为什么不每30秒左右检查一次队列,为什么不将侦听器添加到仅在消息到达时才响应的队列中。 请检查下面的代码段。
static void Main(string[] args)
{
//create an event
MessageQueue msmq = new MessageQueue("queuename");
//subscribe to the event
msmq.ReceiveCompleted += msmq_ReceiveCompleted;
//start listening
msmq.BeginReceive();
}
//this will be fired everytime a message is received
static void msmq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//get the MessageQueue that we used
MessageQueue msmq = sender as MessageQueue;
//read the message
//and process it
Message msg = msmq.EndReceive(e.AsyncResult);
//because this method is only fired once everytime
//a message is sent to the queue
//we have to start listening again
msmq.BeginReceive();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.