要啓用對版本化消息的支持,您須要確保配置所需的組件。 最簡單的方法是: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