我非常了解用于将消息从Java代码发送到Java代码的Java消息传递服务(JMS)。另外我知道CORBA是一个集成编程,它有助于将不同的编程语言绑定在一起,以便它们可以通过对象在它们之间进行通信。
但我想知道是否有针对不同语言的JMS等通用消息传递服务,以便从Java向C ++发送消息,反之亦然。
答案 0 :(得分:4)
我强烈建议从ZeroMQ开始,除非您需要基于代理的体系结构(例如基于AMQP的实现)提供的一些功能(例如RabbitMQ)。
ZeroMQ有很多绑定,包括Java,C#,C ++,C,但它是基于消息的,所以在不同语言之间传输对象可能更适合像OpenDDS这样的东西。见Comparing OpenDDS and ZeroMQ Usage and Performance
Good examples of ZeroMQ实现,从基础到复杂; e.g。
答案 1 :(得分:2)
尝试查看像UMP这样的29种West产品。没有中间的中间件。类似于Tibco RV。使用广播,多播和单播。 http://en.wikipedia.org/wiki/29West。 它不需要任何经纪人。每个通信参与者都应安装UMP,它将运行传输守护进程。对于java,有一个实现JMS规范的lib,并允许通过传输上游和下游消息。
答案 2 :(得分:2)
答案 3 :(得分:1)
如果您不想设置特殊服务器(并且不想混淆CORBA的复杂性怪物),请查看Google协议缓冲区https://developers.google.com/protocol-buffers/
您可以简单地通过套接字发送所有内容(如果需要,甚至可以连接到自己),无需额外的服务器或配置。
答案 4 :(得分:0)
您既有Java / C ++代理实现,也有一些其他语言可以交换消息。
答案 5 :(得分:0)
HornetQ有一个STOMP和REST实现,可以被其他语言使用: TechnicalFaqHornetQ
答案 6 :(得分:0)
您可以查看Spread API(www.spread.org),了解它是否符合您的要求。
答案 7 :(得分:0)
我知道ActiveMQ 可以完成工作。我们通常使用Protocol Buffers来使我们的对象通过线路进行序列化。 XML可以工作,但主要的是你不想要任何语言决定用来代表你的对象的随机内存块,你想要一个已知的序列化格式。
答案 8 :(得分:0)
数据分发服务(DDS)是OMG的标准,与执行CORBA规范的组相同。标准化的语言绑定是C,C ++,Java和Ada,但也可以使用C#和其他语言。您的系统中可以混合使用不同的语言和操作系统。要分发的结构化数据类型以与语言无关的格式(由标准OMG IDL的子集)指定,然后将其转换为特定于语言的接口和数据类型,供应用程序使用。
DDS规范支持许多高级数据管理功能,如强类型和内容感知数据总线,分布式状态管理和历史数据访问。其丰富的服务质量设置允许从应用程序向中间件卸载大量复杂性。
DDS实施通常具有高度可扩展性和分散性。参与DDS基础设施的组件在空间和时间上都是分离的。一些DDS产品部署在众多任务和关键业务系统中。
有关简要介绍和参考列表,请参阅this Wikipedia entry。我已经专注于DDS超过10年,我仍然喜欢它,我认为它是最有用的技术之一。
答案 9 :(得分:0)
TIBCO RV,它有很多接口,比如Java,C,C ++,.NET等等。
答案 10 :(得分:0)
另一个建议是OpenMQ。在它的包中,它包含C头文件和可以链接C / C ++程序的库文件。