要启用对版本化消息的支持,您需要确保配置所需的组件。 最简单的方法是:

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,它是如何工作的

当您发布消息时,EasyNetQ通常会为消息类型创建一个交换并将消息发布到该交换。 订户创建绑定到交易所的队列,因此接收发布给它的任何消息。

在启用消息版本控制的情况下,EasyNetQ将为版本层次结构中的每个消息类型创建一个交换,并将这些交换绑定在一起。 当您发布MyMessageV2消息时,它将被发送到MyMessageV2交换机,它将自动将其转发到MyMessage交换机。

消息序列化时,EasyNetQ将消息类型名称存储在消息属性的Type属性中。 此元数据与您的消息一起发送给任何可以使用它反序列化消息的订阅者。

在启用消息版本控制的情况下,EasyNetQ还会将所有被取代的消息类型存储在消息属性的标题中。 订阅者将使用它来找到消息可以被反序列化的第一种可用类型,意思是即使端点没有最新版本的消息,只要它有一个版本,它也可以被反序列化和处理。

2,消息版本指导

  1. 如果更改无法通过扩展原始消息类型来实现,那么它不是消息的新版本,而是新的消息类型。
  2. 如果您不确定,则倾向于创建新的消息类型,而不是现有消息的版本。
  3. Versioned消息不应该与请求/响应一起使用,因为消息类型是请求/响应协定的一部分,并且即使V2扩展了V1,Request <V1,Response>与Request <V2,Response>也不相同(即公共类V2 :V1 {})
  4. Versioned消息不应该用于发送/接收,因为这是针对性的发送,因此发送者和接收者之间存在声明的依赖关系。

9,EasyNetQ-版本化消息的更多相关文章

  1. IPFS - 可快速索引的版本化的点对点文件系统(草稿3)

    摘要 星际文件系统是一种点对点的分布式文件系统, 旨在连接所有有相同的文件系统的计算机设备.在某些方面, IPFS类似于web, 但web 是中心化的,而IPFS是一个单一的Bittorrent 群集 ...

  2. 如何版本化你的API?--转

    原文地址:http://www.infoq.com/cn/news/2017/09/How-versioning-API 如何版本化API需要考虑各种实际业务场景,但是一个完备的API应该是: 和客户 ...

  3. ArcGIS分支版本化( Branch Versioning )技术介绍

    概述 分支版本化技术是有别于传统的SDE版本化技术,它用于支持WebGIS模式下的多用户长事务编辑. 优势功能 使用分支版本化技术将获得以下功能 1. 支持长事务的编辑. 2. 支持Undo和Redo ...

  4. ABP 适用性改造 - 添加 API 版本化支持

    Overview 在前面的文章里有针对 abp 的项目模板进行简化,构建了一个精简的项目模板,在使用过程中,因为我们暴露的 api 需要包含版本信息,我们采取的方式是将 api 的版本号包含在资源的 ...

  5. .NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.消息队列与RabbitMQ 1.1 消息队列 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  6. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理

    在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...

  8. 微信公众平台开发教程Java版(三) 消息接收和发送

    https://www.iteye.com/blog/tuposky-2017429 前面两章已经介绍了如何接入微信公众平台,这一章说说消息的接收和发送 可以先了解公众平台的消息api接口(接收消息, ...

  9. C# PC版微信消息监听自动回复

    最近有个微商客户需要搞个 个人微信监听群消息关键字并实现自动回复功能, 因为他有很多群  很多买家咨询的话 一个个回复太麻烦, 客户要求 比如群里有人发 关键字 产品1  则自动回复产品1的相关描述 ...

随机推荐

  1. 再谈:自定义结构体的对齐问题之__attribute__ ((packed))方法【转】

    转自:https://blog.csdn.net/ipromiseu/article/details/5955295 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...

  2. 实现开发板与ubuntu的共享--根文件系统NFS--Samba共享【sky原创】

    虚拟机要选择桥接,并且禁用有线和无线网卡,开启本地连接,本地连接属性要写如下:     ip地址是在连上板子后,windows   cmd  下  ipconfig得出的 板子的网线最好连接交换机或者 ...

  3. nodejs 在线学习课堂

    http://ww***/class/5359f6f6ec7452081a7873d8

  4. Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试

    由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ...

  5. Highcharts 使用

    官网:https://www.hcharts.cn/ api:https://api.hcharts.cn/highcharts 效果 html代码 <div id="containe ...

  6. visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系

    使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作: 1.将应用程序及应用程序所用到的所有DLL拷贝到打包目录,加入打包程序之中. 2.将应 ...

  7. 《Oracle 11g 入门到精通.明日科技.pdf》学习笔记

    本博文整理者:刘军 本博文出自于: <Oracle 11g 入门到精通>一书 声明:1:转载请标注出处.本文不得作为商业活动.本人不负法律责任.违法者自负一切法律责任. ————————— ...

  8. 移位操作符 << >> >>>

    按位操作符只可用于int类型,其它类型都会转化位int类型在操作,并且只有数值右端的低5位才右用(因为2^5=32) <<  左移位操作符,低位补零 >>  右移位操作符,有符 ...

  9. web----ssl通信

    ssl通信 https://www.cnblogs.com/zhengah/p/5007753.html

  10. python+selenium二:定位方式

    # 八种单数定位方式:elementfrom selenium import webdriverimport time driver = webdriver.Firefox()time.sleep(2 ...