【问题标题】:MassTransit Interoperability with non-.NET servicesMassTransit 与非 .NET 服务的互操作性
【发布时间】:2018-03-29 14:13:09
【问题描述】:

我一直在使用 MassTransit,非常喜欢它。但是,默认情况下,它使用一些特定于 MassTransit 的 JSON 包装所有 RabbitMQ 有效负载/消息。这使得与非 .NET 服务交换消息变得困难。我知道 JSON 可以被任何语言解析,但 MassTransit 是一个仅限 .NET 的东西,在我的非 .NET 服务中,我希望避免添加特殊逻辑来处理 MassTransit 生成的消息。

是否可以使用不通过“MessageEnvelope”接口的 MassTransit 序列化 JSON 消息以与非 MassTransit 服务建立更好的互操作性?或者这样做会破坏大部分/所有 MassTransit 功能?

【问题讨论】:

  • Alexey 回应了,他的回答是对的。它是 JSON,您会发现信封中的元数据在未来很重要。无论使用哪种语言,消息合约始终是头等大事。 TL;DR:利用数十年的消息传递经验并意识到信封完全有意义。
  • 感谢您的回复。您是说如果您与拥有 Java 服务的人一起工作,您会要求他们将所有消息包装在 MessageEnvelope 接口中以确保设置了 MessageId、CorrelationId 等?我正试图弄清楚如何与我公司的非 .NET 同事相处融洽。
  • 是的。我会。我们甚至建立了一个项目来为 Java 做这件事,叫做 MassTransit CrossTown :)
  • 虽然我很欣赏 MassTransit CrossTown 的创建,但它看起来并没有提供发送和请求/响应模式,这对我来说是一个亮点。我正在研究另一个名为 JTransitLight 的项目,但它也不完整——它们只支持 Bus.Publish。

标签: masstransit


【解决方案1】:

described in the documentation

由于消息的格式是预定义的,因此您将无法避免使用一些特殊的逻辑来消费 MT 消息。

这是一条最小的消息:

{
    "destinationAddress": "rabbitmq://localhost/input_queue",
    "headers": {},
    "message": {
        "value": "Some Value",
        "customerId": 27
    },
    "messageType": [
        "urn:message:MassTransit.Tests:ValueMessage"
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多