关于多线程操作MSMQ处理业务的问题

时间:2021-08-05 23:03:32
现在有这样一个需求,为了解决并发问题,使用MSMQ来进行通信。MSMQ读取到的消息作为参数分发给各各线程,由多个线程来调用业务层处理业务。线程池控制只能并行10个线程。达到10个线程峰值的时候停止消息读取,当有空闲线程时继续读取消息分给空闲线程处理。
目前实现了一部分。感觉有问题,有大神指点指点么


[Serializable]
    public class Test
    {
        public string id { get; set; }

        public string name { get; set; }

        public List<Temp> Temps { get; set; }
    }
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("开始监听消息");
            ThreadPool.SetMaxThreads(10, 10);
            IMsgQueue<Test> msg = MsgQueueManager.CreateService<Test>("paiban", ReadMode.Gradually);
            msg.ReceiveCompleted = (model, body) =>
            {
                //开始处理业务
                //  Console.WriteLine("消息内容" + body.ToString());
                ThreadPool.QueueUserWorkItem(WorkFlow,body);
                int remainwork; int remainio;
                ThreadPool.GetAvailableThreads(out remainwork, out remainio);
                if (remainwork < 10)
                {
                    msg.Start();
                }
                //业务处理完成后重新开始监听
            };

            msg.Start();

            Console.ReadKey();
        }
        
        static void WorkFlow(object body)
        {
            Console.Write(body);
            Thread.Sleep(20000);
        }

    }


2 个解决方案

#1


这里业务处理后需要一个回调函数来通知业务处理结束。好判断是否开启监听继续读取消息。该怎么实现呢

#2


目前实现的部分代码完全不对。有人指点指点么,该怎么获取子线程处理完成并释放的通知呢。

#1


这里业务处理后需要一个回调函数来通知业务处理结束。好判断是否开启监听继续读取消息。该怎么实现呢

#2


目前实现的部分代码完全不对。有人指点指点么,该怎么获取子线程处理完成并释放的通知呢。