跨c#,c ++和可能更多语言的进程间pub / sub模型

时间:2013-03-06 16:48:38

标签: ipc message-queue publish-subscribe

我想制作一个包含多个沟通流程的系统。

主进程正在引发事件。将有不同的事件,每个事件包含结构化数据。一些从属进程将订阅事件,接收数据并调用适当的处理程序。 关于我的案例有两个注意事项。

  1. 我不关心安全性,因为没有第三方服务。
  2. 我担心表现。
  3. 人们建议在这种情况下使用像Zero MQ这样的消息队列。我对它应该实现的方式有点困惑。据我所知,ZeroMQ只能发送\接收原始字符串数据。

    我是否应该将数据打包到发布方的字符串(例如json或xml)中,在订阅方手动解包数据并仅过滤必要的消息?

    如果有更好的方法来解决我的问题,我很乐意听到它。

2 个答案:

答案 0 :(得分:0)

我会为您描述的场景使用消息传递提供程序。我看到的优点是

1)不必编写代码来向订阅者传递消息。这让我专注于我的业务逻辑和数据格式。我可以决定数据格式(XML / JSON /任何符合我要求并且订阅者理解的格式)并发布消息。

2)如果出现需求,可以在不添加/修改任何代码的情况下增加订户数量。

3)订户可以移动到不同的机器而不会影响解决方案。

4)订阅者也可以脱机,主/发布者仍然可以发布消息。订阅者可以稍后进入并致电所需的处理程序。

答案 1 :(得分:0)

这些是我看到的选项:

  1. 如果关注的只是性能,虽然事件的持久性和持久性不是要求的一部分,然后将数据打包在字节数组中的自定义协议结构中,并使用套接字进行进程间通信。但请注意 - 自定义字节数组结构在可扩展性和可维护性方面很昂贵。其他选择是选择JSON作为数据交换格式,这种格式相对更具可读性。
  2. 如果事件数据的持久性和持久性是要求的一部分,那么利用面向消息的中间件的好处。诸如声明性同步之类的功能是MOM可以带来的其他一些好处。