【问题标题】:ActiveMQ publisher and subscriber in multiple languages (C++ Java)多种语言的 ActiveMQ 发布者和订阅者 (C++ Java)
【发布时间】:2010-01-22 17:08:48
【问题描述】:

我想使用 ActiveMQ 作为消息代理,在两个进程中的 C++ 组件和 Java 组件之间进行通信。例如。 C++ 组件是发布者,Java 组件是订阅者(可能有多个订阅者)。我查看了 ActiveMQ 网站,它提到了 OpenWire 和 ActiveMQ-CPP 工具。但是,网站上的所有示例都对生产者和消费者使用相同的语言。

我的问题是:

1.ActiveMQ 可以为不同语言的生产者/消费者工作吗?

2.在不同的过程中?怎么样?

【问题讨论】:

    标签: java c++ activemq consumer producer


    【解决方案1】:

    OpenWire 是一种协议,因此理论上可以在任何地方实现,但这并不意味着每种语言都存在完整的实现。 C++ 客户端的细则说:

    “从 2.0 版开始,ActiveMQ-CPP 支持 OpenWire v2 协议,但有一些例外。 ObjectMessage - 我们无法在 C++ 中重建 ObjectMessage 中包含的对象,因此如果您的应用程序订阅了已发送 ObjectMessage 的队列或主题,您将收到消息但无法提取 Object从它。”

    因此,如果您想跨进程发送数据,请编写 C++ 和 Java 组件以使用 API(如果您使用 ActiveMQ-CPP,请确保不要使用 ObjectMessage 类型)。然后运行 ​​ActiveMQ 服务器...告诉您的程序连接到它,它应该可以工作。

    但是,如果您真的只是在控制两个客户端时尝试进行进程间通信,那么这可能有点笨拙。您可能对What is the best approach for IPC between Java and C++?Good alternative to shared memory IPC for Java/C++ apps on Linux 的回复感兴趣

    【讨论】:

    • 为什么 ActiveMQ 是大手笔?
    • 我的理解是您必须运行一个 ActiveMQ 进程,因此您现在总共运行了三个进程(以及运行和配置代理服务器所带来的所有担忧)。如果您使用共享内存,那么您的进程可以直接对话,如果您使用套接字,您可以根据需要在不同的机器上运行程序。每个抽象级别都会为您提供一些东西,而您的应用程序可能需要也可能不需要这些东西。
    • 感谢您的回复。我确实想在不同的机器上运行不同的模块。实际上,就我而言,这是一种发布者/订阅者模式(多个发布者/多个订阅者)我不确定哪个更好:socket vs. ActiveMQ?
    • 我没有使用过 ActiveMQ ......但这不是回答你原来的问题所必需的。对于“什么更好”的问题,我已经超出了我的理解范围。 :) 但是,如果您控制 C++ 和 Java 代码,那么似乎没有充分的理由说明他们不会在 Google Protocol Buffers 之类的东西上使用相同的格式,并且您不需要“消息代理” .但也许 ActiveMQ 非常适合发布/订阅者功能。也许问一个新问题“哪个更适合发布/订阅网络服务,ActiveMQ 或 Bonjour 还是......”,比我了解更多的人可以回答。
    【解决方案2】:

    直接来自 ActiveMQ 的首页:

    Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Ruby, Perl, Python, PHP

    * OpenWire for high performance clients in Java, C, C++, C#
    * Stomp support so that clients can be written easily in C, Ruby, Perl,
      Python, PHP, ActionScript/Flash, Smalltalk to talk to ActiveMQ as well 
      as any other popular Message Broker
    

    我们已经使用 PHP(使用 Stomp)和 Java(使用 OpenWire)对其进行了测试。

    关于进程:不同的生产者和消费者当然可以在完全不同的进程中,通过例如 TCP 或 SSL 进行通信。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2019-05-07
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多