Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程MSMQ读取_C#_Multithreading_Msmq - Fatal编程技术网

C# 多线程MSMQ读取

C# 多线程MSMQ读取,c#,multithreading,msmq,C#,Multithreading,Msmq,我已经创建了一个Windows服务,可以从MSMQueue读取消息,我需要并行地执行此操作(两个线程应该同时读取消息)。我该怎么做? 这是我的代码(基本上是按书写的): 这是我的主要职责: static class Program { static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] {

我已经创建了一个Windows服务,可以从MSMQueue读取消息,我需要并行地执行此操作(两个线程应该同时读取消息)。我该怎么做? 这是我的代码(基本上是按书写的):

这是我的主要职责:

static class Program
  {
    static void Main()
    {
      ServiceBase[] ServicesToRun;
      ServicesToRun = new ServiceBase[] 
            { 
                new MyNewService() 
            };
      ServiceBase.Run(ServicesToRun);
    }
  }

我将在多个windows服务上托管队列读取器的单线程实例


这样,您可以通过增加额外的服务来提高吞吐量,或者通过减少服务来降低吞吐量。这比试图在代码中完成这一切要简单得多

我将在多个windows服务上托管队列读取器的单线程实例


这样,您可以通过增加额外的服务来提高吞吐量,或者通过减少服务来降低吞吐量。这比试图在代码中完成这一切要简单得多

有什么原因不能只在多个线程上进行处理而不在多个线程上出列

这是一个非常基本的实现—它使用
ThreadPool
来对项目进行排队,但是您需要依赖
ThreadPool
的队列来处理线程数和工作项目数。这可能不适合你的情况,这取决于许多其他因素

另外,请注意有关
SetMaxThreads
的备注部分


有什么原因不能只在多个线程上进行处理而不在多个线程上出列

这是一个非常基本的实现—它使用
ThreadPool
来对项目进行排队,但是您需要依赖
ThreadPool
的队列来处理线程数和工作项目数。这可能不适合你的情况,这取决于许多其他因素

另外,请注意有关
SetMaxThreads
的备注部分


有什么问题吗?在我看来,像从队列中挑选消息这样的事情不会从并行化中受益。你确定这不是处理要并行化的消息所产生的工作负载吗?这是一个漏洞:我将MSMQ reader作为控制台应用程序。当我在队列中发送1000条消息时,该阅读器的一个实例在大约15分钟内处理它们。当我启动该控制台应用程序的两个实例时,它们将在8分钟内完成。现在,我有了具有相同读卡器的Windows服务(上面的代码)(处理需要15分钟)。我如何在代码中创建该阅读器的两个实例,以便它们更快地读取消息(必须在代码中)?有什么问题吗?在我看来,从队列中挑选消息之类的事情不会从并行化中受益。你确定这不是处理要并行化的消息所产生的工作负载吗?这是一个漏洞:我将MSMQ reader作为控制台应用程序。当我在队列中发送1000条消息时,该阅读器的一个实例在大约15分钟内处理它们。当我启动该控制台应用程序的两个实例时,它们将在8分钟内完成。现在,我有了具有相同读卡器的Windows服务(上面的代码)(处理需要15分钟)。如何在代码中创建该阅读器的两个实例,以便它们更快地读取消息(必须在代码中)??
static class Program
  {
    static void Main()
    {
      ServiceBase[] ServicesToRun;
      ServicesToRun = new ServiceBase[] 
            { 
                new MyNewService() 
            };
      ServiceBase.Run(ServicesToRun);
    }
  }
private static void MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
{
   try
   {
       MessageQueue mq = (MessageQueue)source;
       Message m = mq.EndReceive(asyncResult.AsyncResult);

       // TODO: Process each message on a separate thread
       // This will immediately queue all items on the threadpool,
       // so there may be more threads spawned than you really want
       // Change how many items are allowed to process concurrently using ThreadPool.SetMaxThreads()
       System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(doWork), m);


       // Restart the asynchronous receive operation.
       mq.BeginReceive();
   }
   catch(MessageQueueException)
   {
       // Handle sources of MessageQueueException.
   }

   return; 
}

private static void doWork(object message)
{
    // TODO: Actual implementation here.
}