我想在两个进程中使用 ActiveMQ 作为 C++ 组件和 Java 组件之间通信的消息代理。例如。C++ 组件是发布者,Java 组件是订阅者(可能有多个订阅者)。我查看了 ActiveMQ 网站,它提到了 OpenWire 和 ActiveMQ-CPP 工具。但是,网站上的所有示例都对生产者和消费者使用相同的语言。
我的问题是:
1.ActiveMQ可以为不同语言的生产者/消费者工作吗?
2.在不同的过程中?如何?
OpenWire 是一种协议,因此理论上可以在任何地方实现,但这并不意味着每种语言都存在完整的实现。C++ 客户端的细则说:
“从 2.0 版开始,ActiveMQ-CPP 支持 OpenWire v2 协议,但有一些例外。ObjectMessage - 我们无法在 C++ 中重建 ObjectMessage 中包含的对象,因此如果您的应用程序订阅了具有发送给它的 ObjectMessage,您将收到该消息,但无法从中提取对象。”
因此,如果您想跨进程发送数据,请编写 C++ 和 Java 组件以使用 API(如果您使用 ActiveMQ-CPP,请确保不要使用 ObjectMessage 类型)。然后运行 ActiveMQ 服务器...告诉您的程序连接到它,它应该可以工作。
但是,如果您真的只是在控制两个客户端时尝试进行进程间通信,那么这可能有点笨拙。您可能对Java 和 C++ 之间 IPC 的最佳方法是什么?和Linux 上 Java/C++ 应用程序的共享内存 IPC 的良好替代品
直接来自 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 进行通信。