RabbitMQ

消息队列在软件中的应用场景

  1. 异步处理上(优于原先的方式)

    为什么优于呢?

    1. 首先,通常情况下,如上图我们其实不用消息队列的情况下,其实也可以不用100ms,不用allof即可
    2. 那么优势在哪呢?在它消息队列的额外特点(可靠性削峰填谷),即可保证大多数消息也就是我们发送大多数的请求能达到准确达到同时它还会控制
  2. 应用解耦

  3. 流量控制

    把对应的消息过多会存到队列中,之后依次发送到对应服务

大多数应用中,可通过消息服务中间件来提升系统异步通信,扩展解耦能力(解耦的相当大的优势在于我之后某个子服务更新换代后可以不用再改原代码,而可以直接通过消息队列来更改)

消息队列的重要概念

消息代理

即是消息队列的服务器,帮你代理一下

目的地

消息发送的终点或接收的位置(有别于接收方/消费者,不是接收方啊!是消息的暂存对象)

主要两种形式的目的地(一对一&一对多)

  1. 队列(点对点的通信模式):每个消息只由一个消费者读取
  2. 主题(topic):多个消费者可以订阅同一个主题,并且每个消费者都可以接收该主题上发送的消息

springboot的使用上

  1. @EnableRabbit开启支持
  2. 自动会导入RabbitAutoConfiguration

RabbitMq的核心概念

  1. message:

    就是我们发送的消息(要传给消费者的东西),包括消息头(类似http的消息头,放一些约定的东西:如routing-key(路由键),priority,delivery-mode(指出该消息可能需要持久性存储)),和消息体(放具体要传送的内容)

  2. Publisher:

    消息的生产者,向交换器(指定发送哪个)发布消息的客户端程序

  3. Exchange:

    交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列

    4类:direct(默认),fanout,topic,和headers,不同exchange转发消息策略有别

  4. Queue

    保存消息直到发送给消费者,消息的容器,也是消息的终点

  5. Binding

    绑定,用于消息队列和交换器之间的关联,一个绑定就是基于路由键将路由器和消息队列连接起来的路由规则,Exchange和Queue的绑定可以是多对多的关系

  6. Connection

    网络连接,如TCP

  7. Channel

    信道,AMQP命令都是通过信道发出去的,不管发布消息,订阅队列还是接收消息都是通过信道完成(对于操作系统来说建立和销毁TCP都是非常昂贵的开销,所以出了信道的概念,来复用一条TCP连接)

  8. Consumer(从消息队列中获取信息的客户端)

  9. Virtual Host:

    虚拟主机(也就是一台消息队列服务器分出一个虚拟消息队列,两者互不干扰)

  10. Broker:(消息队列服务器实体)

核心图

Binding是交换机与队列的粘黏剂

疑问?消息队列如何知道是哪个Consumer需要消息呢?

Consumer需要去订阅topic或者queue,类似订牛奶,之后有牛奶就给你家送

RabbitMQ初学的更多相关文章

  1. RabbitMQ 初学及其深入学习推荐的一些文章

    记录一下学习RabbitMQ过程中,收获比较大的一些文章: 什么都别说,先把这6个Demo 玩一遍 https://www.rabbitmq.com/getstarted.html 大佬1号 http ...

  2. RabbitMQ初学之二:直接发送消息到队列

    一. 背景 总前提:队列无论是在生产者声明还是在消费者声明,只有声明了,才能在RabbitMQ的管理界面看到该队列 生产者直接发送消息到队列,消费者直接消费队列中的消息,而不用指定exchange并绑 ...

  3. RabbitMQ初学之一:exchange与queue的绑定

    最近公司需要使用RabbitMQ,但我之前一直使用的是ActiveMQ,对RabbitMQ进行了初步的学习,但是还不系统,自己做了一些小测试,怕自己以后忘了 一. 背景 拿到代码以后,发现,生产者在向 ...

  4. RabbitMQ初学之踩坑记录

    1:账号或密码错误 com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused usi ...

  5. rabbitmq初学之连接测试

    Login was refused using authentication mechanism PLAIN. 用户名或密码没有设置,或者错误

  6. 初学RabbitMQ

    一.RabbitMQ中的一些概念 (1)Connection(连接) 与RabbitMQ建立连接,由ConnectionFactory创建每个Connection至于一个物理server进行连接,此链 ...

  7. 初学Python——RabbitMQ的安装

    记录踩坑之路,本篇文章主要摘抄自CSDN博客https://blog.csdn.net/weixin_39735923/article/details/79288578 Windows10环境下安装R ...

  8. RabbitMQ消息队列

    RabbitMQ消息队列 !!!  注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析 # 优点,能够保证消息数据持久化,不丢失,支持高并发 安装学习rabbitm ...

  9. rabbitMQ学习2-Python与rabbitmq

    python客户端 # rabbitmq官方推荐的python客户端pika模块 pip3 install pika 应用场景1:单发送单接收 1.生产-消费者模型 P 是生产者 C 是消费者 中间h ...

  10. linux --- 9. docker 容器 和 rabbitmq 队列

    一. docker 容器 1.docker是什么? .linux下容器技术有很多,docker是做的最杰出的一款 .docker能够支撑阿里双十一,京东618的业务,说明,性能,安全性不得差 .doc ...

随机推荐

  1. js md5 和java md5后的值不一样

    开发发现js 对字符串md5 和 java对字符串md5 计算的结果居然不一样,后来找了一个匹配的这里记录一下 注:加密的对象中不能有空格,有空格md5后的结果就不一致,都是眼泪.. js md5算法 ...

  2. C#将汉字转换为拼音

    首先上效果图 方法调用 private void txt_Chinese_TextChanged(object sender, EventArgs e) { txt_PinYIn.Text = //调 ...

  3. Servlet系列:(HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig)详解

    HttpServletRequest HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service() ...

  4. python爬虫-豆瓣电影top250

    一.python爬虫简介1.什么是爬虫:网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本.由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略 ...

  5. docker 安装 ETCD 及 etcd 使用

    本文为博主原创,未经允许不得转载: etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很强大),实现了分布式键值存储和服务发现,etcd 和 ...

  6. Blazor的技术优点

    Blazor是一种使用.NET和C#构建客户端Web应用程序的新兴技术.它允许开发者在浏览器中直接运行.NET代码,而无需依赖JavaScript.Blazor的技术优点主要表现在以下几个方面: 单一 ...

  7. Angular系列教程之依赖注入详解

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  8. Shell-函数-function

  9. Mygin实现简单的路由

    本文是Mygin第二篇 目的: 实现路由映射 提供了用户注册静态路由方法(GET.POST方法) 基于上一篇 Mygin 实现简单Http 且参照Gin 我使用了map数组实现简单路由的映射关系 不同 ...

  10. [转帖]Linux命令之——rsync

    文章目录 1 rsync是干什么用的 2 rsync和scp有什么区别 3 rsync简单用法介绍 rsync四种工作方式 1. 本地文件系统上实现同步 2. 本地主机使用远程shell和远程主机通信 ...