C# 消息队列 (MSMQ) 进程之间的通信

2个程序之间使用消息队列进行通信。
该代码只适用.NET Framework 版本,如果是.NET Core 请使用其他第三方消息队列框架,因为.NET Core 对System.Messaging 已经不支持呢。

进程1用于创建消息队列,然后发送消息。
代码如下:

using System;
using System.Messaging;

namespace App1
{
    
    
    internal class Program
    {
    
    
        static void Main()
        {
    
    
            // 消息队列路径
            string queuePath = @".\Private$\MyQueue";

            // 创建或获取消息队列
            MessageQueue queue;
            if (MessageQueue.Exists(queuePath))
                queue = new MessageQueue(queuePath);
            else
                queue = MessageQueue.Create(queuePath);

            // 持续发送消息
            while (true)
            {
    
    
                Console.WriteLine("Enter the message to send (or 'exit' to quit):");
                string input = Console.ReadLine();

                if (input.ToLower() == "exit")
                    break;

                // 发送消息
                Message message = new Message(input);
                queue.Send(message);

                Console.WriteLine("Message sent from Process 1.");
            }

            Console.ReadLine();
        }
    }
}

注:
1.string queuePath = @".\Private$\MyQueue";MyQueue是自己取的队列名称,前面的可以当成默认写法。
2.使用Send去发送数据,数据可以是任何类型。

进程2用于接收消息队列中的消息。
代码如下:

using System;
using System.Messaging;
using System.Text;
using System.Threading;


namespace App2
{
    
    
    internal class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            // 消息队列路径
            string queuePath = @".\Private$\MyQueue";

            // 创建或获取消息队列
            MessageQueue queue;
            if (MessageQueue.Exists(queuePath))
                queue = new MessageQueue(queuePath);
            else
            {
    
    
                Console.WriteLine("No messages available.");
                Console.ReadLine();
                return;
            }

            try
            {
    
    
                // 不断接收和处理消息
                while (true)
                {
    
    
                    // 接收消息,设置超时时间为1秒
                    // Message message = queue.Receive(TimeSpan.FromSeconds(1));
                    Message message = queue.Receive();
                    // 读取消息内容
                    using (var reader = new System.IO.StreamReader(message.BodyStream, Encoding.UTF8))
                    {
    
    
                        string messageBody = reader.ReadToEnd();
                        Console.WriteLine("Message received in Process 2: " + messageBody);
                    }
                    Thread.Sleep(1000);
                }
            }
            catch (MessageQueueException ex)
            {
    
    
                // 如果等待超时或发生其他消息队列异常,则打印错误信息
                Console.WriteLine("Error receiving message: " + ex.Message);
            }

            Console.ReadLine();
        }
    }
}

queue.Receive()用于接收消息,如果没有收到消息他会处于阻塞状态,直到收到消息。(你也可以设置接收时间,超过了这个时间就会超时。)
消息的接收采用流式接收,具体接收可以和你发送的数据格式进行约定,比如发送JSON就是JSON格式接收。

猜你喜欢

转载自blog.csdn.net/csdn2990/article/details/132069328