消息队列,我只选RabbitMQ!

高并发架构是架构师的必修课,而消息队列,则是王冠上最闪亮的那颗明珠!能否驾驭消息队列这款高并发神器,亦成为架构师的试金石。作为专注.NET领域十多年的老架构师,下面从队列本质、技术选型、实战应用三个方面,给大家整理下个人心得,希望能对大家有所帮助。

队列本质

当下成熟的消息队列产品非常多,各种丰富的特性让人眼花缭乱,难以抉择。穿透现象先看本质,消息队列其实就是一个第三方应用程序,管理着一块儿内存空间,能快速存取数据,具备先进先出特性。只是跟系统架构设计相结合,产生了神奇的特效,请看下图:

基于消息队列的异步架构图

消息队列的好处

1

---流量削峰:高并发的核心问题就是请求集中在同一时间,服务器来不及处理,而有了消息队列,就可以将请求的数据打包放入,然后由后端处理器异步处理,降低高峰期的并发处理压力,用时间换空间

2

---高可用性:90%系统的不可用都是因为数据库,而在异步化架构里,就算数据库挂掉、甚至处理器挂掉,均不影响系统的可用性,客户端可以继续响应请求,只是将请求堆积在消息队列即可

3

---高扩展性:异步化架构里,客户端和处理器是通过消息来交互的,只要保证消息格式不变,可以随意独立演化扩展

技术选型

男怕入错行,女怕嫁错郎,技术选型很迷茫!网上充斥着各种不负责任的分析文章,侃侃而谈,似是而非,胡说八道!下面我结合下个人开发实践经历,以及精选测试后的有效数据,给大家做下分析和推荐,仅一家之言!

1  MSMQ

微软自家重量级队列,内置在Windows Server,除了安装省事儿外,几乎没别的优势,在.NET Core跨平台时代里,已经基本淘汰!

2  ActiveMQ

最老牌的开源消息队列,想当年是开源消息队列首选,不过眼下已进入老年期,社区不活跃了。无论是功能还是性能,ActiveMQ 都已经与现代的消息队列存在明显的差距,它存在的意义在于兼容那些还在用老系统,比如2013年我给广东电信做外包项目时接入的还是ActiveMQ,该选项可以基本排除!

3  Redis-List

互联网开发必备的Nosql-Redis,其List数据结构就是一个轻巧型的队列。优势是Redis的普及性,缺陷是现代化消息队列很多必备功能和特性缺失,只能满足中小型项目需求!

4  ZeroMQ

严格来说 ZeroMQ 并不是消息队列,而是一个基于消息队列的多线程网络库,如果你的需求是将消息队列的功能集成到你的系统进程中,可以考虑使用 ZeroMQ,否则是跟异步化独立架构矛盾的,Pass!

5 RocketMQ

源自阿里的开源消息队列,经历过多次“双十一”考验,它的性能、稳定性和可靠性都是值得信赖的。作为优秀的国产消息队列,近年来越来越多的被国内众多大厂使用。唯一的原罪是为Java开发的国产消息队列,与周边生态系统的集成和兼容程度要略逊一筹,对.NET支持就很不友好,果断放弃不折腾!

6 RabbitMQ

特点是Messaging that just works,“开箱即用的消息队列”。也就是说,RabbitMQ 是一个相当轻量级的消息队列,非常容易部署和使用。这里有个RabbitMQ的安装视频,欢迎扫码自取。

RabbitMQ号称是世界上使用最广泛的开源消息队列,其社区资源丰富、对各种开发语言支持友好、还有各种定制化插件,对于.NETer是非常友好的。还有个独特的Exchange设计,非常实用。虽然也有并发不如其他队列高的问题,但是集群下大部分应用场景是毫无问题的,推荐!

7 Kafka

一个非常成熟的消息队列产品,无论在数据可靠性、稳定性和功能特性等方面都可以满足绝大多数场景的需求,而且拥有着极致性能。跟周边生态系统的兼容性是最好的没有之一,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持 Kafka。但是其致命伤在于Kafka是为了性能选择了异步批量发送模式,导致延时太高,无法满足在线业务场景,常用于日志数据分析等场景!

实战应用

经过以上分析,RabbitMQ以其优异的互联网开发适应性脱颖而出,是.NET架构师必经之路。要用好一款消息队列可不是件容易的事儿,下面为大家规划了一个RabbitMQ的实战学习路线,为期四天,从应用到调优全覆盖,这会儿扫码可以免费学习。学习计划如下:

Day 1

1 解读异步化架构设计,理解消息队列的意义

2 完成RabbitMQ全套配置,基于.NET Core使用RabbitMQ

3 实现生产者消费者案例

Day 2

1 详解RabbitMQ的多种路由配置使用和意义

2 结合实例讲解路由的实际工作中的作用

3 解读RabbitMQ消息确认以及消息防丢失

Day 3

1 详解RabbitMQ消息持久化

2 解读和应用消息优先级

3 RabbitMQ多种消费者模式案例实操

4 生产者消费者 VS发布订阅

Day 4

1 Linux下RabbitMQ集群服务器搭建

2 集群队列下消息分发策略和高可用机制

文末福利

为期4天,每天20:00到21:30,由资深架构师Richard为大家直播实操RabbitMQ,基础实战到集群到优化一网打尽,直通架构师!赶紧扫码获取免费学习名额,仅限前200名!先到先得哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python比较三个数_python经典练习题(三)

人生苦短,你需要python继续学习python第一题题目:输入三个整数 x,y,z,请把这三个数由小到大输出不借助sortnum1 int(input("请输入第一个数"))num2 int(input("请输入第二个数"))num3 int(input("请输入第三个数&qu…

[PAT乙级]1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。 输出格式: 在一行内输出 n 的各位数字之和的…

ROADS POJ - 1724(限制条件的最短路)【邻接表+深搜】

思路:先说下题意,题意第一行给了一个k,代表你有k的钱数,下一行有一个n,代表n个点,然后一个m,代表m条边,然后接下来m行,每行有四个数,分别代表起点、终点、路径长度和要花费的钱数,题…

使用Jexus 容器化您的 Blazor 应用程序

在本文中,我们将介绍如何将 Blazor 应用程序放入Jexus 容器以进行开发和部署。我们将使用 .NET Core CLI,因此无论平台如何,使用的命令都将是相同的。Blazor 托管模型Blazor 有两个托管模型,它们的要求不同,本文主要基…

mysql中临时修改参数用什么关键字_postgresql 中的参数查看和修改方式

1.查看参数文件的位置使用show 命令查看,比较常用的show config_file.此还可以查看pg_settings数据字典.test# show config_file;config_file------------------------------/data/pgdata/postgresql.conf(1 row)test# show hba_filetest-# ;hba_file-------------------------…

[PAT乙级]1004 成绩排名

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 2 行:第 1 个学生的姓名 学号…

圆桌会议 HDU - 1214(规律+模拟队列)

Time limit 1000 ms Memory limit 32768 kB OS Windows Source 杭电ACM省赛集训队选拔赛之热身赛 HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论…

【A】 Natasha3.0 引擎亮给你,请你来折腾

文章转载授权级别:A一 、 引言Natasha 距离上个 2. 版本大概有1个月了,在4月份里我把模板与引擎进行了重构,旨在更抽象、规范、合理,方便其他人参与开源、定制。接下来我将从 引擎的结构 、类库的使用及新热的 Source Generators …

linux ps mysql_linux系统中ps指令使用详解

在linux系统作为和unix和ubuntu相同的系统,ps指令经常被用到查看程序进程的状态,但是这个指令具体怎么用您会吗?本文就以centos为例,结合项目中服务器的实际应用,给大家讲解下ps指令的用法。一、参数a——显示现行终端…

ASP.NET Core在CentOS上的最小化部署实践

引言本文从Linux小白的视角, 在CentOS服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。在开始之前,我们还是重温一下部署原理,正如你所常见的.Net Core 部署图:在Linux上部署.Net Core App最好的方式是使用Kestrel 服务…

Pearls POJ - 1260(区间记忆化搜索)

题意: n件物品,给出数量和价格,(注意数量和价格都是升序给出的这个是能DP的关键),要买掉所以商品 对于每类物品,所需要的价格是(a[i]10)*p[i] ,即要多买10件,也可以把价格…

[PAT乙级]1006 换个格式输出整数

让我们用字母 B 来表示“百”、字母 S 表示“十”&#xff0c;用 12…n 来表示不为零的个位数字 n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234&#xff0c;因为它有 2 个“百”、3 个“十”、以及个…

bigdecimal 平均数_MapReduce实例-必须用Combine--求平均数

本身求平均数很简单的&#xff0c;必须用到combine的话我在两个地方废了很多时间&#xff0c;一是combine的输入不仅仅是map的输出&#xff0c;还有可能是combine的输出&#xff0c;所以对value的处理得分两种情况吧&#xff1b;二是结果要保留4位有效数字。。。噗&#xff0c;…

面试官:你不懂六大设计原则,回去等通知吧!

一、前言不知道大家是否有这样的体会&#xff0c;就是在学习设计模式的时候&#xff0c;看了很多书籍&#xff0c;也照着很多示例把每个模式挨个敲了几遍&#xff0c;但过了一段时间后&#xff0c;就会忘了一大半。或者有的朋友尝试在业务编码中使用&#xff0c;却越用越复杂&a…

Dollar Dayz POJ - 3181(动态规划+大数高低位分离输出)

题意&#xff1a;就是给出二个数N&#xff0c;和k&#xff0c;有1~k种钱币&#xff0c;每种都 是无限个&#xff0c;用这些种类的钱币可以组合成总钱N有多少种方式。 解题&#xff1a;这就是一个完全背包&#xff0c;把N看成容量&#xff0c;钱币的类型值为 花费和价值。与记录…

[PAT乙级]1007 素数对猜想

让我们定义d​n​​为&#xff1a;d​n​​p​n1​​−p​n​​&#xff0c;其中p​i​​是第i个素数。显然有d​1​​1&#xff0c;且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<10​5​​)&#xff0c;请计…

is this mysql server_Mysql:is not allowed to connect to this MySQL server

如果你想连接你的mysql的时候发生这个错误&#xff1a;ERROR 1130: Host 192.168.1.3 is not allowed to connect to this MySQL server解决方法&#xff1a;1。 改表法。可能是你的帐号不允许从远程登陆&#xff0c;只能在localhost。这个时候只要在localhost的那台电脑&#…

Asp.Net Core Filter 深入浅出的那些事-AOP

一、前言在分享ASP.NET Core Filter 使用之前&#xff0c;先来谈谈AOP,什么是AOP 呢&#xff1f;AOP全称Aspect Oriented Programming意为面向切面编程&#xff0c;也叫做面向方法编程&#xff0c;是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统…

C++函数模板和普通函数的调用规则

C函数模板和普通函数的调用规则: 普通函数可以进行自动类型转换。 函数模板必须严格类型匹配。 C编译器优先考虑普通函数。 如果函数模板可以产生一个更好的匹配&#xff0c;那么选择模板。 可以通过空模板实参列表的语法限定编译器只能通过模板匹配。 代码如下&#xff…

A Mini Locomotive POJ - 1976(动态规划+思维)

题意&#xff1a;有三个火车头&#xff0c;n个车厢&#xff0c;每个车厢里面对应的有一定的人数。规定每个火车头最多 拉m个连续的车厢而且他们拉的车厢一定是从左到右连续的&#xff0c;问它能够拉的最多的人数&#xff1b; 思路&#xff1a;类似01背包的解法&#xff0c;首先…