RabbitMQ

C#队列学习笔记:RabbitMQ实现客户端相互通讯

你离开我真会死。 提交于 2020-04-12 09:04:15
原文: C#队列学习笔记:RabbitMQ实现客户端相互通讯 一、引言 fanout类型的Exchange,路由规则非常简单:它会把所有发送到该Exchange的消息,路由到所有与它绑定的Queue中。假设有一个聊天室,各个客户端都订阅在同一fanout exchange type,那每个客户端发送出来的消息,所有的客户端都能收到,因为大家都订阅了。此时,只需要简单地限制一下,只有是与我有关的消息,才在聊天界面上显示。这样,即可达到相互通讯的效果。 二、示例 2.1、环境准备 本示例使用EasyNetQ来实现,请先在NuGet上安装。 2.2、实体类 新建一个实体类MessageBody: public class MessageBody { public string FromUserId { get ; set ; } public string Message { get ; set ; } public string ToUserId { get ; set ; } } 2.3、主窗体 新建一个ChatMain窗体: 代码如下: public partial class ChatMain : Form { public ChatMain() { InitializeComponent(); } /// <summary> /// 客户端 A /// </summary> /

C#队列学习笔记:RabbitMQ基础知识

荒凉一梦 提交于 2020-04-12 09:02:53
原文: C#队列学习笔记:RabbitMQ基础知识 一、引言 RabbitMQ是Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适。RabbitMQ是一个由 Erlang 语言开发的AMQP(高级消息队列协议)的开源实现,其内部结构如下: RabbitMQ作为一个消息代理,主要和 消息 打交道,负责接收并转发消息。RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。 二、基础概念 讲解基础概念之前,先来构造一个整体结构图,以方便我们更好地去理解RabbitMQ的基本原理。 通过上面这张结构图,能够清晰地了解到Send Message到Receive Message的一个大致流程。 2.1、Queue Queue(队列)在RabbitMQ中的作用是存储消息,队列的特性是先进先出。上图可以清晰地看到Client A和Client B是生产者,生产者生产消息最终被送到RabbitMQ的内部对象Queue中去,而消费者则是从Queue中取出数据,可以简化表示为: 生产者Send Message,“A”被传送到Queue中,消费者发现消息队列Queue中有订阅的消息,就会将这条消息A读取出来进行一系列的业务操作

C#队列学习笔记:RabbitMQ延迟队列

[亡魂溺海] 提交于 2020-04-12 09:00:15
原文: C#队列学习笔记:RabbitMQ延迟队列 一、引言 日常生活中,很多的APP都有延迟队列的影子。比如在手机淘宝上,经常遇到APP派发的限时消费红包,一般有几个小时或24小时不等。假如在红包倒计时的过程中,没有消费掉红包的话,红包会自动失效。假如上述行为使用RabbitMQ延时队列来理解的话,就是在你收到限时消费红包的时候,手机淘宝会自动发一条延时消息到队列中以供消费。在规定时间内,则可正常消费,否则依TTL自动失效。 在RabbitMQ中,有两种方式来实现延时队列:一种是基于队列方式,另外一种是基于消息方式。 二、示例 2.1、发送端(生产端) 新建一个控制台项目Send,并添加一个类RabbitMQConfig。 class RabbitMQConfig { public static string Host { get ; set ; } public static string VirtualHost { get ; set ; } public static string UserName { get ; set ; } public static string Password { get ; set ; } public static int Port { get ; set ; } static RabbitMQConfig() { Host = " 192

C#队列学习笔记:RabbitMQ优先级队列

↘锁芯ラ 提交于 2020-04-12 08:59:14
原文: C#队列学习笔记:RabbitMQ优先级队列 一、引言 在具体业务中可能会遇到一些要提前处理的消息,比如普通客户的消息按先进先出的顺序处理,Vip客户的消息要提前处理。在RabbitMQ中,消息优先级的实现方式是:在声明queue时设置队列的x-max-priority属性,然后在publish消息时,设置消息的优先级即可。 RabbitMQ优先级队列注意事项: 1)RabbitMQ3.5以后才支持优先级队列。 2)只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效。 3)优先级取值范围在0~9之间,数值越大则优先级越高。 二、示例 2.1、发送端(生产端) 新建一个控制台项目Send,并添加一个类RabbitMQConfig。 class RabbitMQConfig { public static string Host { get ; set ; } public static string VirtualHost { get ; set ; } public static string UserName { get ; set ; } public static string Password { get ; set ; } public static int Port { get ; set ; } static RabbitMQConfig() {

一不小心写了个免费的跨平台网络考试培训网教系统

时光总嘲笑我的痴心妄想 提交于 2020-04-12 08:30:03
之前的旧版本为许多客户服务了好多年,但随着技术变更与发展,旧版已难以再挑起大梁。因本人一直都扎根在网教行业,对实现网络考试与培训有着深刻的认识与理解,故打算用当前主流技术全新构建一套新的版本。 新版本采用.Net Core 2(目前已升级为.Net Core 3)c#语言编写(新版名为“麦荻网教系统”),结合分布式架构、微服务等技术开发而成。麦荻网教系统有着极高的并发承载能力,有着极强的稳定性能,且在应对超大规模的应用场景时也能有更好的应对能力与扩展性。麦荻网教系统前端基于Html5(开源免费)、Vue(开源免费)、iView(开源免费)等技术实现前后端分离架构开发而成。 1、麦荻网教系统支持部署在Windows Server 2012/2016/2019及更高版本的系统、支持部署在Ubuntu 14.10/16.10及更高版本的系统、支持部署在CentOS 7.0及更高版本的系统、支持部署在Docker 1.10及更高版本的系统。 2、麦荻网教系统支持SQL Server 2012/2014/2016及更高版本的数据库、支持MySQL 6.0及更高版本的数据库。 3、麦荻网教系统支持Memcached 1.4及更高版本的缓存组件(开源免费)、支持RabbitMQ 3.8(开源免费)及更高版本的队列组件。 4、您可以按自已的实际应用规模将“麦荻网教系统

一不小心写了个免费的跨平台网络考试培训网教系统

夙愿已清 提交于 2020-04-11 18:59:16
之前的旧版本为许多客户服务了好多年,但随着技术变更与发展,旧版已难以再挑起大梁。因本人一直都扎根在网教行业,对实现网络考试与培训有着深刻的认识与理解,故打算用当前主流技术全新构建一套新的版本。 新版本采用.Net Core 2(目前已升级为.Net Core 3)c#语言编写(新版名为“麦荻网教系统”),结合分布式架构、微服务等技术开发而成。麦荻网教系统有着极高的并发承载能力,有着极强的稳定性能,且在应对超大规模的应用场景时也能有更好的应对能力与扩展性。麦荻网教系统前端基于Html5(开源免费)、Vue(开源免费)、iView(开源免费)等技术实现前后端分离架构开发而成。 1、麦荻网教系统支持部署在Windows Server 2012/2016/2019及更高版本的系统、支持部署在Ubuntu 14.10/16.10及更高版本的系统、支持部署在CentOS 7.0及更高版本的系统、支持部署在Docker 1.10及更高版本的系统。 2、麦荻网教系统支持SQL Server 2012/2014/2016及更高版本的数据库、支持MySQL 6.0及更高版本的数据库。 3、麦荻网教系统支持Memcached 1.4及更高版本的缓存组件(开源免费)、支持RabbitMQ 3.8(开源免费)及更高版本的队列组件。 4、您可以按自已的实际应用规模将“麦荻网教系统

RabbitMQ集群架构(HA)并结合.NET Core实操

扶醉桌前 提交于 2020-04-10 11:18:20
一、前言   已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core、DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园业务,所涉及到的数据一天达上百万,并且还需要对这些并发数据进行解析转化,在此次的过程中也涉及到了使用RabbitMQ进行业务的解耦和流量削峰来应对如此大量的请求;过程是痛苦的,但结果是美好的。 说到MQ,大家应该都听过,像RabbitMQ,Kfaka,Activemq,rocketmq等,消息队列是一种跨进程的通信机制,主要用于上下游之间传递消息的,主要给我们解决了“应用解耦”、“流量削峰”、“异步通信”等,下图是针对MQ的对比图,如果不完善的地方请海涵: 二、RabbitMQ说明 1、在这么多的MQ中,我为什么选择使用RabbitMQ呢?其实最主要的原因是它是部署最广泛的开源消息代理,有成千上万的用户,社区支持性非常好,支持许多操作系统和云环境上运行,也支持多种消息传递协议,关键还是部署简单,在高并发、高可用中有成熟的方案,详情见官方文档: RabbitMQ 2、在针对RabbitMQ集群架构方案中,有四种架构模式,主备模式、镜像模式、远程模式、多活模式,每种架构都可以算很实用,在企业中“镜像模式”也是用的最多的,最普遍的。 3、RabbitMQ 六种工作模式 点对点模式(一对一

RabbitMQ集群架构(HA)并结合.NET Core实操

喜你入骨 提交于 2020-04-10 11:17:12
一、前言   已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core、DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园业务,所涉及到的数据一天达上百万,并且还需要对这些并发数据进行解析转化,在此次的过程中也涉及到了使用RabbitMQ进行业务的解耦和流量削峰来应对如此大量的请求;过程是痛苦的,但结果是美好的。 说到MQ,大家应该都听过,像RabbitMQ,Kfaka,Activemq,rocketmq等,消息队列是一种跨进程的通信机制,主要用于上下游之间传递消息的,主要给我们解决了“应用解耦”、“流量削峰”、“异步通信”等,下图是针对MQ的对比图,如果不完善的地方请海涵: 二、RabbitMQ说明 1、在这么多的MQ中,我为什么选择使用RabbitMQ呢?其实最主要的原因是它是部署最广泛的开源消息代理,有成千上万的用户,社区支持性非常好,支持许多操作系统和云环境上运行,也支持多种消息传递协议,关键还是部署简单,在高并发、高可用中有成熟的方案,详情见官方文档: RabbitMQ 2、在针对RabbitMQ集群架构方案中,有四种架构模式,主备模式、镜像模式、远程模式、多活模式,每种架构都可以算很实用,在企业中“镜像模式”也是用的最多的,最普遍的。 3、RabbitMQ 六种工作模式 点对点模式(一对一

物联网宠儿mqtt.js那些事儿

血红的双手。 提交于 2020-04-09 18:47:24
常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。 前者很常见,MQTT是什么呢?MQTT属于IoT也就是物联网的概念。 快来和使用mqtt.js开发IM功能2年的作者一探究竟吧~ 常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。MQTT是什么呢? Kafka,RocketMQ和RabbitMQ属于微服务间的mq,而MQTT则属于IoT也就是物联网的概念。 mqtt.js是MQTT在nodejs端的实现。vue技术栈下的前端也可用。 mqtt.js官方为微信小程序和支付宝小程序也做了支持。微信小程序的MQTT协议名为 wxs ,支付宝小程序则是 alis 。 如果还是一脸懵逼,那么就跟随我通过mqtt.js去认识一下这个物联网领域的宠儿吧。 什么是微消息队列? MQTT关键名词解释 P2P消息和Pub/Sub消息 封装的mqtt.js通用class 客户端发包函数sendPacket 客户端连接 mqtt.connect() 订阅topic mqtt.Client#subscribe() 发送消息 mqtt.Client#publish() 接收消息 mqtt.Client#“message”事件 什么是微消息队列? 消息队列一般分为两种: 微服务消息队列(微服务间信息传递,典型代表有RabbitMQ,Kafka,RocketMQ)

系统学习消息队列分享(三) 该如何选择消息队列?

别说谁变了你拦得住时间么 提交于 2020-04-09 18:32:44
聊一下几个比较常见的开源的消息队列中间件。如果你正在做消息队列技术选型,不知道该选择哪款消息队列,你一定要先听一下这节课的内容。 作为一个程序员,相信你一定听过“没有银弹”这个说法,这里面的银弹是指能轻松杀死狼人、用白银做的子弹,什么意思呢?我对这句话的理解是说,在软件工程中,不存在像“银弹”这样可以解决一切问题的设计、架构或软件,每一个软件系统,它都是独一无二的,你不可能用一套方法去解决所有的问题。 在消息队列的技术选型这个问题上,也是同样的道理。并不存在说,哪个消息队列就是“最好的”。常用的这几个消息队列,每一个产品都有自己的优势和劣势,你需要根据现有系统的情况,选择最适合你的那款产品。 选择消息队列产品的基本标准 虽然这些消息队列产品在功能和特性方面各有优劣,但我们在选择的时候要有一个最低标准,保证入选的产品至少是及格的。 接下来我们先说一下这及格的标准是什么样的。 首先,必须是开源的产品,这个非常重要。开源意味着,如果有一天你使用的消息队列遇到了一个影响你系统业务的 Bug,你至少还有机会通过修改源代码来迅速修复或规避这个 Bug,解决你的系统火烧眉毛的问题,而不是束手无策地等待开发者不一定什么时候发布的下一个版本来解决。 其次,这个产品必须是近年来比较流行并且有一定社区活跃度的产品。流行的好处是,只要你的使用场景不太冷门,你遇到 Bug 的概率会非常低