什么是消息队列

顾名思义,这是一个消息按顺序排列的集合,遵循的是先进先出原则,队列中存放的是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(一)介绍相关推荐

  1. RabbitMq 消息中间件介绍初体验

    RabbitMq 消息中间件介绍&为什么要使用消息中间件&什么时候使用消息中 间件   我们用java来举例子, 打个比方 我们客户端发送一个下单请求给订单系统(order)订单系统发 ...

  2. [喵咪MQ(1)]RabbitMQ简单介绍准备工作

    [喵咪MQ(1)]RabbitMQ简单介绍准备工作 前言 哈喽大家好呀! 看标题就知道我们这次要讲MQ,之前博客中有提到的KafKa理论上来说也是一个优秀的MQ队列软件,比较知名的MQ有:Go语言编写 ...

  3. Rabbitmq 相关介绍之双机镜像模式集群配置

    一.环境介绍 系统: Centos 6.7 2.6.32-573.el6.x86_64 node1 172.16.60.187 node2 172.16.60.188 软件包 erlang-19.0. ...

  4. RabbitMQ简单介绍+Windows环境安装

    文章目录 文章目录 文章目录 1.RabbitMQ简介 2.RabbitMQ与其他MQ有什么不同 3.RabbitMQ环境安装 3.1 安装erlang 3.2 安装rabbitmq-server 4 ...

  5. 【转载】消息队列RabbitMQ入门介绍

    (一)基本概念 RabbitMQ 是流行的开源消息队列系统,用 erlang 语言开发.我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持.RabbitMQ 是 AMQP(高级消息队列协议)的标准实现 ...

  6. 关于rabbitmq的介绍

    原文转载:http://blog.csdn.net/whycold/article/details/41119807 保护原帖,尊重技术,致敬工匠! 一.简介 MQ全称为Message Queue, ...

  7. RabbitMQ 入门介绍

    MQ 的相关概念 什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游 ...

  8. 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 ...

  9. 十次方——RabbitMQ之介绍

    一  RabbitMQ简介 1.1  消息队列中间件 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队 ...

  10. python 消息中间件_消息队列中间件 RabbitMQ 详细介绍——安装与基本应用(Python)...

    RabbitMQ 是当前最流行的消息中间件(Message Broker)之一,支持多种消息协议(如 AMQP.MQTT). 同时它也是一个轻量级的非常易于部署的开源软件,可以运行在当前大多数操作系统 ...

最新文章

  1. 图像有用区域 bfs
  2. 用平方映射理解tanh
  3. 在 Linux 中如何禁止用户登录
  4. BCP导出导入大容量数据实践
  5. 论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法
  6. 通过关闭UseDNS和GSSAPIAuthentication选项加速SSH登录
  7. 中关村在线 测试软件,主观测试软件:ZOL Monitor LCD 简介
  8. mysql jdbc配置重连_Spring Boot 配置MySQL数据库重连的操作方法
  9. el-input输入值无法在输入框显示
  10. pyinstaller将py文件转成exe格式
  11. 微信公众号爬虫开发-常见问题汇总
  12. mysql下载 补丁_mysql 官方补丁在哪里下载?
  13. ADNI-MRI-PET
  14. 【渝粤题库】陕西师范大学202861 发展心理学 作业(专升本)
  15. 神经机器翻译中的曝光偏差,幻觉翻译与跨域稳定性
  16. yarn 错误There appears to be trouble with your network connection. Retrying
  17. Java程序员“金三银四“就一定要出去面试吗?
  18. 智能聊天机器人微信小程序
  19. 安卓8.0下的应用安装
  20. css filter blur 白边,CSS3的blur白边怎么去除

热门文章

  1. 总结一下linux中的分段机制
  2. ffmpeg time_base详解
  3. 匿名页反向映射得建立
  4. 队列queue中的常用函数
  5. delphi 不允许在线程里操作ui怎么办_11款鲜为人知的在线工具,全面而又强大
  6. 求解图的连通块数量——DFS方法实现
  7. Java 调用 pytorch_5分钟!用Java实现目标检测 | PyTorch
  8. Ubuntu12.04使用vi编辑器进入编辑模式按上下键出现乱码
  9. java的map的方法_Java中Map集合(接口)的基本方法程序演示
  10. android 多线程 进度条,Android子线程进度条不显示的问题