C# RabbitMQ(一)介绍
什么是消息队列
顾名思义,这是一个消息按顺序排列的集合,遵循的是先进先出原则,队列中存放的是Message。
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
目前在生产环境,使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。
消息队列应用场景:异步处理、应用解耦、流量削锋、日志处理和消息通讯。
首先消息队列的应用场景:
异步处理:
其中提及串行方式和并行方式,这两者本身在效率方面就是并行方式效率高一些。那为啥异步处理能比并行方式处理效率还高呢??明明人家都并行处理的说呢,哭唧唧。在理解消息队列后,顿悟!原来加入消息队列以后,直接将有用的信息写入消息队列,就直接返回执行结果啦,个人理解就是先将信息放在消息队列中,不-用等到真的接收到实时的操作返回结果,这种情况下只消耗了将消息写进消息队列的时间,那是板上钉钉的快多啦!!(也许到这里有人会有疑问,那返回结果可咋办呢,哈哈哈哈,好巧,我也有这个疑问。后来了解到,可以在消息队列中设置规则,比如消息队列里消息过期时间啊,设置一个标志用来接收订阅方返回的消息呀啥的,真鸡智!)
应用解耦:
这个大家应该很容易理解,因为爱网购的网狗们就比较熟悉这个。我们在淘宝下单应该都没失败过吧,如果失败了就是心里大骂180遍,想花钱都不行!!!仔细想想,万一我们下单的时候马爸爸的库存系统崩了,是不是真的下不了单呢,那肯定不能,那损失可大了。所以顺着原作者思路走,确实是这个理儿,下单归下单,库存归库存。用户下单以后,即使当时库存系统崩了,但是订单信息我们写入消息队列啦,不用管库存啥的啦,马爸爸一点都不方的,咱再从消息队列多转储几次就好啦!!等到库存系统正常减少以后,返回一个信息到消息队列就好啦!!多完美的剁手旅程!!
流量削锋
马爸爸搞秒杀活动啦!!但是相信大家都会经历过进不了购物页面,或者进去了不小心退出来就再也进不去的场景吧,嗯,是的,痛心疾首!!现在我算是知道了商家的小九九。原来可能利用了消息队列直接拒绝了我们的消息请求呢!这个仇我记住了!!服务器在接收我们这些小白用户的请求后,将我们的请求写入了消息队列,如果消息队列中消息数量超过最大数量,不幸运的我们就被直接拒绝啦,或者直接跳到错误界面。。。不过现在想想好像还没有直接进入过错误界面,可能是出于用户体验的考虑,直接跳转到空白页面了吧。。。太惨了,每一次抢不到的秒杀都是人间悲剧!!
日志处理
大量日志传输的情况我是真的没有遇到过,毕竟人家还太小没遇到过这种大风大浪。不过顺着上面这几种情况的思路想想,无非就是,先把信息找个仓库先存着呗,以后再让仓库再慢慢转发,这个仓库就是消息队列啦!!此处解释堪称完美!!
消息通讯
没想到消息队列这么好用,原作者提到消息队列一般都内置了高效的通信机制,因此可以用在纯的消息通讯(ps:我是真的没理解纯的是啥意思!!一脸问号!)。实现点对点消息队列、聊天室等。
点对点通讯:两个人共用一个消息队列。
聊天室通讯:好多人共用一个消息队列。
为什么要用RabbitMQ消息队列
消息队列是啥:消息队列(Message Queue),一种先进先出的队列结构,用于处理Message。
消息队列解决的问题:在处理大量并发请求时,同步处理往往会发生阻塞,特别是在更新数据库或者调用其他组件时。消息队列能够实现请求的异步处理、应用解耦、流量削锋和消息通讯,同时能够有效防止阻塞导致的消息丢失。
消息队列系统,一般都包含3个角色:队列服务端,队列的生产者,队列的消费者。这种架构与当下流行的分布式架构极为契合。
在使用RabitMQ之前,先对几个概念做一下说明
RabbitMQ是一个消息代理。他从消息生产者(producers)那里接收消息,然后把消息送给消息消费者(consumer)在发送和接受之间,他能够根据设置的规则进行路由,缓存和持久化。
一般提到RabbitMQ和消息,都用到一些专有名词。
生产(Producing)意思就是发送。发送消息的程序就是一个生产者(producer)。我们一般用"P"来表示:
在这里插入图片描述
队列(queue)就是邮箱的名称。消息通过你的应用程序和RabbitMQ进行传输,它们只能存储在队列(queue)中。 队列(queue)容量没有限制,你要存储多少消息都可以——基本上是一个无限的缓冲区。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能从同一个队列(queue)中获取数据。队列可以画成这样(图上是队列的名称):
在这里插入图片描述
消费(Consuming)和获取消息是一样的意思。一个消费者(consumer)就是一个等待获取消息的程序。我们把它画作"C":
在这里插入图片描述
#### 通常,消息生产者,消息消费者和消息代理不在同一台机器上。
C# RabbitMQ(一)介绍相关推荐
- RabbitMq 消息中间件介绍初体验
RabbitMq 消息中间件介绍&为什么要使用消息中间件&什么时候使用消息中 间件 我们用java来举例子, 打个比方 我们客户端发送一个下单请求给订单系统(order)订单系统发 ...
- [喵咪MQ(1)]RabbitMQ简单介绍准备工作
[喵咪MQ(1)]RabbitMQ简单介绍准备工作 前言 哈喽大家好呀! 看标题就知道我们这次要讲MQ,之前博客中有提到的KafKa理论上来说也是一个优秀的MQ队列软件,比较知名的MQ有:Go语言编写 ...
- Rabbitmq 相关介绍之双机镜像模式集群配置
一.环境介绍 系统: Centos 6.7 2.6.32-573.el6.x86_64 node1 172.16.60.187 node2 172.16.60.188 软件包 erlang-19.0. ...
- RabbitMQ简单介绍+Windows环境安装
文章目录 文章目录 文章目录 1.RabbitMQ简介 2.RabbitMQ与其他MQ有什么不同 3.RabbitMQ环境安装 3.1 安装erlang 3.2 安装rabbitmq-server 4 ...
- 【转载】消息队列RabbitMQ入门介绍
(一)基本概念 RabbitMQ 是流行的开源消息队列系统,用 erlang 语言开发.我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持.RabbitMQ 是 AMQP(高级消息队列协议)的标准实现 ...
- 关于rabbitmq的介绍
原文转载:http://blog.csdn.net/whycold/article/details/41119807 保护原帖,尊重技术,致敬工匠! 一.简介 MQ全称为Message Queue, ...
- RabbitMQ 入门介绍
MQ 的相关概念 什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游 ...
- RabbitMQ——入门介绍
目录 1.消息队列 1.1.MQ 的相关概念 1.1.1.什么是 MQ 1.1.2.为什么要用 MQ 1.1.3.MQ 的分类 1.1.4.MQ 的选择 1.2.RabbitMQ 1.2.1.Rabb ...
- 十次方——RabbitMQ之介绍
一 RabbitMQ简介 1.1 消息队列中间件 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队 ...
- python 消息中间件_消息队列中间件 RabbitMQ 详细介绍——安装与基本应用(Python)...
RabbitMQ 是当前最流行的消息中间件(Message Broker)之一,支持多种消息协议(如 AMQP.MQTT). 同时它也是一个轻量级的非常易于部署的开源软件,可以运行在当前大多数操作系统 ...
最新文章
- 图像有用区域 bfs
- 用平方映射理解tanh
- 在 Linux 中如何禁止用户登录
- BCP导出导入大容量数据实践
- 论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法
- 通过关闭UseDNS和GSSAPIAuthentication选项加速SSH登录
- 中关村在线 测试软件,主观测试软件:ZOL Monitor LCD 简介
- mysql jdbc配置重连_Spring Boot 配置MySQL数据库重连的操作方法
- el-input输入值无法在输入框显示
- pyinstaller将py文件转成exe格式
- 微信公众号爬虫开发-常见问题汇总
- mysql下载 补丁_mysql 官方补丁在哪里下载?
- ADNI-MRI-PET
- 【渝粤题库】陕西师范大学202861 发展心理学 作业(专升本)
- 神经机器翻译中的曝光偏差,幻觉翻译与跨域稳定性
- yarn 错误There appears to be trouble with your network connection. Retrying
- Java程序员“金三银四“就一定要出去面试吗?
- 智能聊天机器人微信小程序
- 安卓8.0下的应用安装
- css filter blur 白边,CSS3的blur白边怎么去除
热门文章
- 总结一下linux中的分段机制
- ffmpeg time_base详解
- 匿名页反向映射得建立
- 队列queue中的常用函数
- delphi 不允许在线程里操作ui怎么办_11款鲜为人知的在线工具,全面而又强大
- 求解图的连通块数量——DFS方法实现
- Java 调用 pytorch_5分钟!用Java实现目标检测 | PyTorch
- Ubuntu12.04使用vi编辑器进入编辑模式按上下键出现乱码
- java的map的方法_Java中Map集合(接口)的基本方法程序演示
- android 多线程 进度条,Android子线程进度条不显示的问题