初识消息队列/RabbitMQ详解

欢迎大家阅读《朝夕Net社区技术专刊》

我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!

今天来给大家分享关于消息队列的内容;作为一个软件技术开发者,听到消息队列这几个字,就有种很高端的感觉;因为现在只要是稍大的平台都要考虑大数据高并发的问题、集群的问题、负载均衡的问题;那么消息队列在解决这类问题上占着举足轻重的地位;比方说小伙伴们常常使用的火车篇购票软件12306就使用到了消息队列;所以消息队列的学习和掌握是作为一个高级开发这必备的技能了。

01

PART

什么是消息队列

图1:消息队列

图1就是一个消息队列的使用结构图,比方说买票系统需要生成订单,不是直接就去调用订单系统,而是通过消息队列,把生成订单的数据,写入消息队列中去,然后订单系统就可以到消息队列中去订阅获取数据,再生成订单;消息队列有个特点,先进先出,先存进去的就先被取出来,取出来以后,数据在队列中被删除,消息数据在消息队列中是持久化存储的;只要是没有被取出,就会一直存储在消息队列中

如上图,就把买票系统和生成订单系统做了解耦;即时是生成订单系统发生故障了,并不影响买票系统,依然可以把消息先写入消息队列;等生成订单系统正常了,再继续去生成订单;这里也会涉及到三个名词---生产者/消费者/队列;写入消息到队列的被称为生产者,在消息队列中取出数据的被称为消费者;

在大数据高并发的情况下,服务器压力变大,如果使用消息队列,可以让生产者服务器做集群,消费者服务器也做集群;如图2。

图2

如果生产者服务器不能满足需求了,可以来多态服务器,来同时处理,写入消息到消息队列,消费者服务器如果处理能力不够,也可以增加多个消费者服务器,来同时消费消息队列里的数据;从而大大的提高系统的处理能力。

消息队列不仅可以实现一方写入,一方取出,也可以是一方既可以写入,也可以取出;既做生产者,也做消费者;如图3

图3

怎么样,如上图,就可以做一个多个客户端之间的即时通信了!

经过以上介绍,我们了解了什么是消息队列在我们技术开发中的应用,消息队列能给我们带来什么。他其实就是一个第三方的一个队列;让要做的事情能够排队进行;让多个进程协作完整业务处理;当然了,消息队列也是一个独立的进程;现在业界已经有很多已经成型的消息队列引擎;下面就给大家列举一些。

u  ZeroMQ

u  推特的Distributedlog

u  ActiveMQ:Apache旗下的老牌消息引擎

u  RabbitMQ、Kafka:AMQP的默认实现。

u  RocketMQ

u  Artemis:Apache的ActiveMQ下的子项目

u  Apollo:同样为Apache的ActiveMQ的子项目的号称下一代消息引擎

以上这些消息队列引擎,都已经比较成型,其中RabbitMQ支持的功能非常丰富,RabbitMQ支持集群化,高可用部署架构,支持消息高可靠;支持多种编程语言;现在的技术开发都追求支持高可用,集群,可靠性;所以,学习RabbitMQ是我们的首选;这里我就准备把RabbitMQ给同学们做以介绍,从RabbitMQ的环境准备、环境部署;使用RabbitMQ做一个开发Demo;包括还有RabbitMQ的进阶,支持集群的;RabbitMQ的路由配置。

02

PART

消息队列RabbitMQ

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。

RabbitMQ服务器是用Erlang语言编写的;可以支持的操作系统有:Linux/WindowsNT 到 10/Windows Server2003 到 2016/macOS/Solaris/FreeBSD/TRU64/VxWorks

RabbitMQ支持下列编程语言:C#/Python/Java/Ruby/PHP/JavaScript/Go/Elixir/Objective-C

老师主要是做C#开发培训,老师这里将会以Windows系统作为支持给大家分享;RabbitMQ是支持Windows的

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

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

相关文章

zookeeper理解

Zookeeper简介 Zookeeper的数据模型 层次化的目录结构,命名符合常规文件系统规范每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识节点znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点Znode中的互刷可以有多个版本…

那些年,在MSRA实习过的女孩,现在都怎么样了?

编者按:我们用两周时间回访了五位在 MSRA 实习过的女孩,她们也都是当年“实习派”的主人公。我们本想在更长的时间维度下,看一看 MSRA 给予她们的改变。然而超乎预期的是,在她们身上,坚持的力量比改变更强。变与不变&a…

[Qt入门] QPushButton创建

1.创建一个QPushButton(按钮): #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) {//创建一个按钮QPushButton * btn new QPushButton;btn->show();//show以顶层方式弹出窗口控件//让btn对象 依赖在my…

Zookeeper理解---ZAB协议

ZAB协议 Zookeeper并不是完全采用Paxos算法&#xff0c;而是使用了一种称为Zookeeper Atomic Broadcast&#xff08;ZAB&#xff0c;Zookeeper原子消息广播协议&#xff09;作为数据一致性的核心算法&#xff0c;依据此算法来实现分布式数据一致性的解决。他是一种特别为Zooke…

【最强VSCode】之管理MySql数据库

(梅花香自苦寒来)你没有看错&#xff0c;就是用VSCode来管理MySql数据库&#xff0c;我也是第一次听说&#xff0c;感谢群管理DX小伙伴&#xff0c;三人行必有我师焉。话不多说&#xff0c;直接开张&#xff0c;VSCode还是很不错的&#xff0c;以后多多分享插件吧。1、你平时是…

[Qt入门]QMainWindow创建

代码如下: #include "mainwindow.h" #include <QMenuBar> #include <QToolBar> #include <QDebug> #include <QPushButton> #include <QStatusBar> #include <QLabel> #include <QDockWidget> #include <QTextEdit>…

Zookeeper--ZAB与Paxos算法联系与区别

ZAB与Paxos算法的联系与区别 两者联系 两者都存在一个类似于Leader的进程角色&#xff0c;由其负责协调多个Follower进程的运行Leader进程会等待超过半数的Follower做出正确的反馈后&#xff0c;才会将一个提案进行提交在ZAB协议&#xff0c;每个Proposal中都包含一个epoch值…

[Flags]标识的Enum不能使用Html.GetEnumSelectList方法

在使用Asp.Net Core MVC写程序时&#xff0c;对用户类型做了如下定义&#xff1a;namespace ManufacturingExecutionSystemCore.Enums {public enum UserType{[Description("无身份人员")][Display(Name "无身份人员")]UnidentifiedPerson0x00,[Descripti…

[Qt入门]模态和非模态对话框创建

模态对话框创建: #include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> #include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);connect(ui->…

Zookeeper实践与应用- Canal

基于MySql BinLog的增量订阅和消费组件&#xff1a;Canal Cancal是阿里13年1月开源的一个基于MySql数据库Binlog实现的增量订阅和消费的组件。项目取名Canal取自管道的英文单词&#xff0c;流转的医生&#xff0c;是一个定位于基于MySql数据库Binlog增量日志来实现数据库镜像&…

你遇到的面试官是「伯乐」吗?

之前写了一篇应应聘者视角的「面试中要注意的点」&#xff0c;《聊聊面试的事&#xff08;应聘方&#xff09;》。这次再来一篇面试官视角的。如果你不是面试官&#xff0c;也没关系。所谓“知己知彼&#xff0c;方能百战百胜”&#xff0c;了解一下面试官在面试时的侧重点&…

[Qt入门]消息对话框创建

错误对话框: //错误对话框QMessageBox::critical(this,"critical","错误");信息对话框: //信息对话框QMessageBox::information(this,"info","信息");提问对话框: //提问对话框//1.QMessageBox::question(this,"ques",&quo…

记录一次线上超时异常查询

线上事故复盘 前言 前一次上线&#xff0c;当时正常&#xff0c;第二天发现有部分超时报警&#xff0c;最终发现应为Dubbo接口一次传输数据量太大导致线程虚拟内存占用 线上问题排查过程 报警邮件中查询到有一部分接口超时量激增&#xff0c;查询定位到某个Dubbo接口&#x…

没用过.gitignore还敢自称高级开发?

Git是跟踪项目中所有文件的好工具&#xff0c; 但是&#xff0c;您会希望在项目的整个生命周期中不要跟踪某些文件及其变更。系统文件&#xff08;i.e. Mac系统的.Ds_Store&#xff09;应用程序配置文件&#xff08;i.e. app.config, .env&#xff09;构建组件&#xff08;i.e.…

[Qt入门]QTreeWidget控件创建

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//treeWidget树控件使用//设置水平头ui->treeWidget->setHeaderLabels(QStringList()<<"英雄&…

支付价格计算中精度问题之double,float

前言 前段时间开发新的微信小程序&#xff0c;借此机会将老掉牙的支付模块重构&#xff0c;并且支持现金支付&#xff08;之前都是虚拟币支付&#xff09;&#xff0c;在重构期间遇到计算上的一些精度问题&#xff0c;虽然数额影响非常小但是影响比较大&#xff0c;我觉得有必…

.net core 集成 sentry 进行异常报警

.net core 集成 sentry 进行异常报警IntroSentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端&#xff0c;客户端(目前客户端有 C#, Python, PHP, JavaScript, Ruby等多种语言)就嵌入在…

[Qt入门]QTableWidget控件创建

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//TableWidget控件//设置列数ui->tableWidget->setColumnCount(3);//设置水平表头ui->tableWidget->…

Zookeeper--Watcher机制源码剖析一

Watcher-- 数据变更通知 我们知道Zookeeper提供来分布式数据的订阅/发布功能&#xff0c;一个典型的发布/订阅模型系统定义了一种一对多的订阅关系&#xff0c;能让多个订阅者同时监听某个主题对象&#xff0c;当这个被监听对象自身状态发生变化时候&#xff0c;会通知所有订阅…

.NET Core 3.1 的REST 和gRPC 性能测试

看到越南小哥 的github 上的Evaluating Performance of REST vs. gRPC &#xff0c; 使用的是.NET Core 3.0 , 今天我把它升级到.NET Core 3.1 同样做了一个测试&#xff0c;文章的结果和他的博客文章是一样的&#xff1a;https://dev.to/thangchung/performance-benchmark-grp…