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

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; }
}
主站蜘蛛池模板: 于都县| 武邑县| 济阳县| 获嘉县| 甘南县| 广西| 济源市| 股票| 谷城县| 普洱| 德江县| 温州市| 莒南县| 集贤县| 新密市| 海原县| 阿城市| 南昌市| 宜宾市| 临漳县| 新绛县| 都昌县| 阳原县| 新田县| 措勤县| 镇宁| 贵阳市| 轮台县| 白玉县| 剑阁县| 绥棱县| 双辽市| 鄂伦春自治旗| 开平市| 徐州市| 东丽区| 谷城县| 宁阳县| 萨嘎县| 溧水县| 贵港市|