使用微软消息队列实现C#进程间通信(一)

 顾名思义,微软消息队列(MSMQ)是一种给队列发送消息以便稍后进行处理的方法。消息由一个“Producer”(生产者)应用程序发送出去,再由一个“Consumer”(消费者)应用程序返回。

 这两个应用程序可以在同一台机器上,在整个网络中,或甚至是位于并不总是连接在一起的不同机器上。MSMQ具有故障保险特性,因为如果第一次传送失败,它会重新发送消息。这样可保证你的应用程序消息到达它们的目的地。

 我将应用一个叫做“TechRepublic”的队列。当你运行本文下载版本中的样本实例时,如果这个队列不存在,它会自动建立。

 在前面的一篇文章中,Zach Smith说明了如何使用IPC通道在同一台机器上的两个进程间通信。他将在本文中说明如何在同一台机器或网络上的应用程序间实现进程间通信。

访问MSMQ

 通过.NET访问队列由System.Messaging.MessageQueue对象完成。列表A说明了如何在一台名为“SRV-MESSAGING”的计算机上访问TechRepublic队列。

列表A

 

MessageQueue queue = new MessageQueue("SRV-MESSAGINGTechRepublic"); 

注:要应用这个对象,你必须在你的项目中添加一个参考。

 现在我们有了一个MessageQueue对象,这个对象为你提供与队列交互需要的所有功能。

 如果队列不存在&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
消息队列是一种进程间通信的方式,可以用于不同进程之间的通信。它基于消息的异步传递,即一个进程把消息放入消息队列中,而另一个进程从队列中获取消息。 实现消息队列的主要步骤如下: 1. 创建消息队列。创建消息队列需要指定消息队列的键值和权限等信息。 2. 发送消息。在发送消息时,需要指定消息队列的标识符、消息类型和消息内容等信息。 3. 接收消息。在接收消息时,需要指定消息队列的标识符和消息类型等信息。 以下是一个使用消息队列实现进程间通信的简单示例: ```c #include <stdio.h> #include <stdlib.h> #include <sys/msg.h> #include <unistd.h> #define MSG_SIZE 1024 typedef struct { long type; char text[MSG_SIZE]; } message; int main() { int msgid; key_t key; message msg; // 创建消息队列 key = ftok(".", 'a'); if ((msgid = msgget(key, IPC_CREAT|0666)) == -1) { perror("msgget error"); exit(1); } // 发送消息 msg.type = 1; sprintf(msg.text, "Hello, this is message from process %d", getpid()); if (msgsnd(msgid, &msg, sizeof(msg.text), 0) == -1) { perror("msgsnd error"); exit(1); } // 接收消息 if (msgrcv(msgid, &msg, sizeof(msg.text), 1, 0) == -1) { perror("msgrcv error"); exit(1); } printf("Received message: %s\n", msg.text); // 删除消息队列 if (msgctl(msgid, IPC_RMID, NULL) == -1) { perror("msgctl error"); exit(1); } return 0; } ``` 该示例中,首先创建一个消息队列,然后在发送进程中向消息队列中发送一条消息,接收进程从消息队列中接收消息并输出。最后删除消息队列。注意,发送和接收进程需要共享消息队列的标识符,可以通过 ftok() 函数生成一个唯一的键值来实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值