要启用对版本化消息的支持,您须要确保配置所需的组件。 最简单的方法是:spa
var bus = RabbitHutch.CreateBus( "host=localhost", services => services.EnableMessageVersioning() )
一旦启用了对版本化消息的支持,您必须明确选择任何您但愿被视为版本化的消息。版本控制
// 此消息未通过版本控制,在发布时将按照与其余任何方式相同的方式进行处理 public class MyMessage { public string Text { get; set; } } // 这条消息是版本化的,而且会发现它是MyMessageV2和MyMessage订阅者的方式 public class MyMessageV2 : MyMessage, ISupersede<MyMessage> { public int Number { get; set; } }
1,它是如何工做的code
当您发布消息时,EasyNetQ一般会为消息类型建立一个交换并将消息发布到该交换。 订户建立绑定到交易所的队列,所以接收发布给它的任何消息。blog
在启用消息版本控制的状况下,EasyNetQ将为版本层次结构中的每一个消息类型建立一个交换,并将这些交换绑定在一块儿。 当您发布MyMessageV2消息时,它将被发送到MyMessageV2交换机,它将自动将其转发到MyMessage交换机。队列
消息序列化时,EasyNetQ将消息类型名称存储在消息属性的Type属性中。 此元数据与您的消息一块儿发送给任何可使用它反序列化消息的订阅者。get
在启用消息版本控制的状况下,EasyNetQ还会将全部被取代的消息类型存储在消息属性的标题中。 订阅者将使用它来找到消息能够被反序列化的第一种可用类型,意思是即便端点没有最新版本的消息,只要它有一个版本,它也能够被反序列化和处理。string
2,消息版本指导it