官术网_书友最值得收藏!

Versioning messages

Even though I can honestly say that I have developed interfaces that could accommodate any change made to both sides without ever modifying the interface, most people don't design to that extreme. There will, more likely than not, come a time where you will have to change a message to accommodate a new feature or request, and so on. Now, we get into the issue of message versioning.

To enable support for versioned messages, we need to ensure the required components are configured. The simplest way to achieve this is as follows:

var bus = RabbitHutch.CreateBus( "host=localhost", services =>   services.EnableMessageVersioning() )

Once support for versioned messages is enabled, we must explicitly opt-in any messages we want to be treated as versioned. So as an example, let's say we have a message defined called MyMessage. As you can see in the following message, it is not versioned and all versions will be treated the same way as any other when it is published:

public class MyMessage
{
public string Text { get; set; }
}

The next message that you see will be versioned, and ultimately it will find its way to both the V2 and previous subscribers by using the ISupersede interface:

public class MyMessageV2 : MyMessage, ISupersede<MyMessage>
{
public int Number { get; set; }
}
主站蜘蛛池模板: 溧阳市| 茌平县| 平潭县| 霍州市| 山东| 临夏县| 镇宁| 平罗县| 滕州市| 富阳市| 卢龙县| 华亭县| 永顺县| 滨州市| 五家渠市| 绿春县| 宜章县| 曲阜市| 余姚市| 桂平市| 万州区| 盐城市| 株洲市| 垦利县| 醴陵市| 紫金县| 刚察县| 房山区| 赤峰市| 岳阳县| 普宁市| 兴业县| 茶陵县| 武宁县| 黄梅县| 浏阳市| 龙海市| 大安市| 佛冈县| 商水县| 武陟县|