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

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. XML解析技术简介——(一)

  2. NSIS程序安装包制作

    nsis下载地址:http://www.pc6.com/softview/SoftView_14342.html nsis使用: 启动NSIS程序主界面,选择"可视化脚本编辑器(VNISEd ...

  3. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  4. Python学习之not,and,or篇

    Python学习之not,and,or篇 运算符示意 not –表示取反运算. and –表示取与运算. or –表示取或运算. 运算符优先级 not > and > or. 举例如下: ...

  5. ftruncate(改变文件大小)

    ftruncate(改变文件大小) 定义函数 int ftruncate(int fd,off_t length); 函数说明 ftruncate()会将参数fd指定的文件大小改为参数length指定 ...

  6. centos中创建自动备份Mysql脚本任务并定期删除过期备份

    背景: OA系统数据库是mysql,引擎为myisam,可以直接通过拷贝数据库文件的方式进行备份 创建只备份数据库的任务: 创建保存mysql数据库备份文件的目录mysqlbak mkdir /hom ...

  7. nagios监控客户端报错/usr/bin/perl^M: bad interpreter: No such file or directory

    nagios服务端监控客户端内存时发现监控不上 在客户端直接执行脚本,报错如下: # /usr/local/nagios/libexec/check_memory.pl -w 6% -c 3% -ba ...

  8. Ubungu 18.04安装MySQL 5.7.24

    Ubuntu 18.04,mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64), USERNAME@USERNAME-VirtualBox:~$ sud ...

  9. Go语言规格说明书 之 通道类型(Channel types)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...

  10. 分享我对JS插件开发的一些感想和心得

    本文阅读目录: •起因•如何开发一个轻量级的适用性强的插件•总结 起因 如果大家平时做过一些前端开发方面的工作,一定会有这样的体会:页面需要某种效果或者插件的时候,我们一般会有两种选择: 1.上网查找 ...