我开始探索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和有效负载。
那么,我列出的哪些工具支持这种需求呢?请在适用的情况下显示语法示例。
发布于 2015-01-30 22:36:53
如果需要将消息格式化为类似XML的格式,从而支持强模式,则只需在接收方接受消息之前执行模式验证即可。然后,如果您能够确保消息在发送之前被检查,那么如果有必要的话,可以通过删除接收方验证来提高性能。
发布于 2015-01-31 06:37:51
在NServiceBus中,您将使用messages来确保发送的所有消息都具有所需的数据
http://docs.particular.net/samples/messagemutators/#transportmessagecompressionmutator
我还建议使用标头来传输这些数据,以避免将业务数据契约与基础设施问题“混淆”。
https://stackoverflow.com/questions/28245704
复制相似问题