C# 写一个 msmq 的客户端和服务端
时间: 2023-11-09 13:08:49 浏览: 187
MSMQ 是一个基于消息的队列,可以实现分布式应用程序之间的通信。下面分别介绍如何使用 C# 编写 MSMQ 客户端和服务端。
## MSMQ 客户端
1. 引入命名空间
```csharp
using System.Messaging;
```
2. 创建一个 MSMQ 消息队列
```csharp
MessageQueue messageQueue = new MessageQueue(".\\private$\\myqueue");
```
其中,".\\private$\\myqueue" 表示创建一个名为 myqueue 的私有消息队列。
3. 发送消息
```csharp
messageQueue.Send("Hello, MSMQ!");
```
4. 接收消息
```csharp
Message message = messageQueue.Receive();
string content = message.Body.ToString();
```
5. 关闭消息队列
```csharp
messageQueue.Close();
```
完整的 MSMQ 客户端代码如下:
```csharp
using System;
using System.Messaging;
namespace MSMQClient
{
class Program
{
static void Main(string[] args)
{
// 创建一个 MSMQ 消息队列
MessageQueue messageQueue = new MessageQueue(".\\private$\\myqueue");
// 发送消息
messageQueue.Send("Hello, MSMQ!");
// 接收消息
Message message = messageQueue.Receive();
string content = message.Body.ToString();
Console.WriteLine(content);
// 关闭消息队列
messageQueue.Close();
Console.ReadKey();
}
}
}
```
## MSMQ 服务端
1. 引入命名空间
```csharp
using System.Messaging;
```
2. 创建一个 MSMQ 消息队列
```csharp
MessageQueue messageQueue = MessageQueue.Create(".\\private$\\myqueue");
```
其中,".\\private$\\myqueue" 表示创建一个名为 myqueue 的私有消息队列。
3. 接收消息
```csharp
messageQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MessageReceived);
messageQueue.BeginReceive();
```
其中,MessageReceived 是一个方法,用于处理接收到的消息。
```csharp
private static void MessageReceived(object sender, ReceiveCompletedEventArgs e)
{
MessageQueue messageQueue = (MessageQueue)sender;
Message message = messageQueue.EndReceive(e.AsyncResult);
string content = message.Body.ToString();
Console.WriteLine(content);
messageQueue.BeginReceive();
}
```
4. 关闭消息队列
```csharp
messageQueue.Close();
```
完整的 MSMQ 服务端代码如下:
```csharp
using System;
using System.Messaging;
namespace MSMQServer
{
class Program
{
static void Main(string[] args)
{
// 创建一个 MSMQ 消息队列
MessageQueue messageQueue = MessageQueue.Create(".\\private$\\myqueue");
// 接收消息
messageQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MessageReceived);
messageQueue.BeginReceive();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
// 关闭消息队列
messageQueue.Close();
}
private static void MessageReceived(object sender, ReceiveCompletedEventArgs e)
{
MessageQueue messageQueue = (MessageQueue)sender;
Message message = messageQueue.EndReceive(e.AsyncResult);
string content = message.Body.ToString();
Console.WriteLine(content);
messageQueue.BeginReceive();
}
}
}
```
阅读全文