【问题标题】:Serializing objects for asynchronous messaging为异步消息序列化对象
【发布时间】:2008-12-01 16:08:16
【问题描述】:

我正在考虑使用 AMQP(使用 qpid)来启用 Python 和 Java 服务的混合相互通信。基本的短信似乎很简单,但与我研究过的所有其他短信技术一样,它似乎停止了。除了构建即时消息应用程序之外,我认为发送字符串并不是一件特别有用的事情,但一个又一个示例演示了如何发送未格式化的文本。

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

【问题讨论】:

    标签: serialization asynchronous messaging amqp


    【解决方案1】:

    Owen,我可以谈谈 RabbitMQ。

    AMQP 是一种二进制协议,您当然可以做的不仅仅是发送字符串!您打算使用哪个 Python 客户端?我们推荐 Barry Pederson 的客户端用于大多数用途:http://barryp.org/software/py-amqplib/ 非常欢迎您来到 RabbitMQ 列表,就您的帖子和 cmets 提出任何您喜欢的问题 :-)

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

    此外,我们是 James 发明的 XMPP 和 STOMP 的粉丝并支持。 STOMP 对于特定类别的消息传递应用程序非常方便,并且 RabbitMQ 支持直接路由和基于主题的路由。我们发现它是一种与 ActiveMQ 互操作的好方法,在这种情况下更喜欢它而不是 JMS。

    我希望您找到适合您用例的服务器,并建议您尝试不同的组合以获得最佳效果。

    干杯,

    亚历克斯

    【讨论】:

      【解决方案2】:

      不管怎样,我在使用 AMQP + Protocol Buffers 方面一直有很好的体验。

      如果发送方正在序列化消息,您可能需要在标头中包含一个 id,以便您知道如何在接收端进行反序列化。不过,这也不是什么难事。

      【讨论】:

        【解决方案3】:

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

        顺便说一句,您可能想看看 Stomp 而不是 AMQP;它有更多的客户端库和支持的消息代理。例如Apache ActiveMQ 比 qpid 或 rabbitmq 更受欢迎 - 或者实际上任何 JMS provider 都可以正常工作。

        【讨论】:

          猜你喜欢
          • 2011-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          • 1970-01-01
          • 1970-01-01
          • 2023-03-17
          • 2012-09-13
          相关资源
          最近更新 更多