0

我开始探索 NServiceBus、RabbitMQ、MassTransit 和 EasyNetQ。

我特别想了解的一个细节是如何确保始终随每条发布的消息发送一组自定义元数据?

例如,无论消息生产者发布什么,我都可能希望确保以下信息始终作为消息的一部分发送:

  • 时间戳
  • 工作流程名称
  • 优先

元数据是什么并不重要,重要的是具有转发此类任意信息的选项或能力。

我喜欢这样的想法,即生产者发送的消息的名称空间和类名会自动转换为消息的“路由键”。然而,为了将额外的元数据附加到消息中,可能需要有某种“预发布”挂钩点,允许将任意消息转换为包装对象的有效负载,如这样的:

public class BaseMessage {
    //a couple fields of meta-data that every message should have.
    public string TimeStamp;
    public int Priority;

    //The payload is the real message that the consumer cares about
    //and can be any format (JSON, XML, etc).
    public string payload;
}

在这种情况下,我不希望“路由键”包含BaseMessage. 在序列化之前,有效负载类型是“路由密钥”应该基于的。

当然,所有这些也都假设消费者有一些方便的方法来反序列化 BaseMessage 和有效负载。

那么我列出的哪些工具支持这种需求呢?请在适用的情况下显示示例语法。

4

2 回答 2

0

如果您需要将消息格式化为支持强模式的 XML 等格式,您可以在接收方接受消息之前简单地执行模式验证。然后,如果您可以确保在发送之前检查消息,那么您可以在必要时通过删除接收方验证来提高性能。

于 2015-01-30T22:36:53.987 回答
0

在 NServiceBus 中,您将使用消息修改器来确保发送的所有消息都具有所需的数据

http://docs.particular.net/samples/messagemutators/#transportmessagecompressionmutator

我还建议使用标头传输此数据,以避免因基础设施问题“污染”您的业务数据合同

于 2015-01-31T06:37:51.947 回答