【问题标题】:RabbitMQ cross platform access issueRabbitMQ 跨平台访问问题
【发布时间】:2018-09-28 07:51:55
【问题描述】:

我正在研究 rabbitMQ 并使用 C# .net 客户端,发布者和订阅者组件由两个不同的团队设计和管理,他们致力于不同的解决方案。

设计发布者的团队 1 通过将类型 A 的消息转换为字节数组来发送它。 设计订阅者的 Team 2 收到 Team A 发布的字节数据,需要将其转换为 Type A 进行进一步处理。

演示消息类型

class Message
{
    public string Name { get; set; } = "Publishing message to Q";
}

所以在这种情况下,两个团队是否都需要处理共享的“类型 A”,因为如果两个团队在他们的最后都保持相同的消息类型,那么它就不起作用了。

是否有可能使用 JSON 类型的消息结构存储在 RabbitMQ 中,以便系统可以跨平台使用它。我在互联网上搜索,发现 RabbitMQ 服务器只存储字节。

此外,我们的发布者客户端之一是基于 Java 构建的,因此当它使用 Java 客户端并在其自身端管理消息负载类型时如何与之通信。

我没有找到关于 rabbitMQ 的任何好的文档。

【问题讨论】:

  • 为什么是字节数组?为什么不是 JSON?
  • @LutzHorn 因为根据 rabbitMQ 规范,它只接受 byte[] 数组来存储数据。
  • 这是在哪里指定的?我使用 RabbitMQ 发送内容类型为 application/json 的 JSON 文档。有关示例,请参见 stackoverflow.com/q/34200756/9455968
  • 嗨@LutzHorn,你提到的链接,它使用RabbitMQ管理插件Web界面发布数据。当我使用 RabbitMQ .net 客户端在 RabbitMQ 中发布数据时,此客户端仅公开仅适用于 byte[] 的方法。您也可以查看链接stackoverflow.com/questions/27840710/…

标签: rabbitmq


【解决方案1】:

我在 rammitMQ .net 客户端 GIT 论坛上问过同样的问题,根据回复 rabbitMQ 仅适用于字节,我们可以按如下方式实现跨平台访问:

“RabbitMQ 不知道消息的内容并将消息视为一组字节。这意味着您可以随意以任何方式序列化数据。您可以设置消息属性以指示消息的内容类型和内容编码,然后消费者将使用该信息适当地反序列化消息正文。

请注意,RabbitMQ 不关心任何消息属性是什么,并且始终将消息视为字节 blob。

在您的情况下,使用 .NET JSON 库将带有您的消息的类或 DTO 序列化为 JSON。您可以使用消息头来指示已序列化的类。然后,消费方可以使用这些信息来了解如何反序列化 JSON。” https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/413

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多