我想将ActiveMQ用作在两个进程中在C ++组件和Java组件之间进行通信的消息代理。例如。 C ++组件是发布者,Java组件是订阅者(可能有多个订阅者)。我看看ActiveMQ网站,它提到了OpenWire和ActiveMQ-CPP工具。但是,网站上的所有示例都为生产者和消费者使用相同的语言。
我的问题是:
1.可以为不同语言的生产者/消费者工作吗?
2.在不同的过程中?怎么样?
答案 0 :(得分:2)
OpenWire是一种协议,因此理论上可以在任何地方实现,但这并不意味着每种语言都存在完整的实现。 C ++客户端的精细打印说:
“从版本2.0开始,ActiveMQ-CPP支持OpenWire v2协议,但有一些例外。 ObjectMessage - 我们无法在C ++中重构ObjectMessage中包含的对象,因此如果您的应用程序订阅了发送给它的ObjectMessage的队列或主题,您将收到该消息但无法提取对象从它。“
因此,如果要跨进程发送数据,则编写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
的回复感兴趣答案 1 :(得分:0)
直接来自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
* 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进行通信。