English 中文(简体)
将对象序列化以进行异步消息传递
原标题:
  • 时间:2008-12-01 16:08:16
  •  标签:

我正在考虑使用AMQP(使用qpid)使Python和Java服务之间能够相互通信。基本的文本消息通信似乎足够简单,但是,与我研究过的所有其他消息传递技术一样,在这里似乎就止步了。除了构建即时消息应用程序外,我认为发送字符串并不是特别有用的事情,然而,一个又一个的例子演示了发送未格式化的文本。

我的直觉是使用XML(反)序列化或类似的东西(JSON,YAML,Protocol Buffers等),这在两种语言中都有很好的库支持。这是最佳实践吗?如果是,人们会推荐哪个(反)序列化协议?还是我错过了某个要点,应该很满足地发送少量文本?

问题回答

欧文,我可以谈谈关于RabbitMQ的几句话吗?

AMQP是一种二进制协议,你肯定可以做更多的事情,而不仅仅是发送字符串!你打算使用哪个Python客户端?我们推荐Barry Pederson的客户端适合大多数使用:http://barryp.org/software/py-amqplib/你可以自由地来RabbitMQ列表中询问与你的帖子和评论相关的任何问题 :-)

正如詹姆斯所指出的那样,JSON是好的。RabbitMQ支持JSON-RPC通过HTTP连接到AMQP后端。人们也使用RabbitMQ与Orbited一起用于彗星类型的应用程序。

此外,我们也是XMPP和STOMP的粉丝,并支持它们,James也是STOMP的发明者。STOMP对于某些类型的消息应用程序非常方便,RabbitMQ支持直接和基于主题的路由。我们发现这是与ActiveMQ互通的好方法,相比于该场景下的JMS,我们更倾向于使用它。

我希望你能找到适合你使用情况的正确服务器,并建议你尝试不同的组合,以获得最佳结果。

干杯 (Gān bēi)

亚历克西斯

就发言人而言,我一直用AMQP + Protocol Buffers有很好的体验。

如果发送者正在对消息进行序列化,则您可能需要在标头中包括一个标识符,以便您知道如何在接收端进行反序列化。然而,这并不太麻烦就能完成。

XML或JSON可能是最简单的。协议缓冲区很酷,但是如果您真的需要(因为它实质上是一种二进制线格式,因此有点难以使用),则可以将其视为稍后考虑的优化。

顺便说一下,您可能想看看 Stomp 而不是 AMQP;它有更多的客户端库和支持的消息代理。例如,Apache ActiveMQ 比 qpid 或 rabbitmq 更受欢迎 - 或者任何 JMS 提供商都可以工作得很好。





相关问题
热门标签