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. AIO异步通信。BIO同步阻塞式IO, NIO同步非阻塞通信。

    IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完 ...

  2. 无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网

  3. vue 使用print.js实现前端打印功能

    https://blog.csdn.net/cccdf_jjj/article/details/99563682 插件vue-print-nb实现前端打印当前页面功能 https://blog.csd ...

  4. mongoose学习记录

    1 const mongoose = require('mongoose'); 2 3 mongoose.connect('mongodb://localhost/playground') 4 .th ...

  5. Winform的使用

    Winform是什么 以下内容,来自朝夕教育课程,没有基础的可以去朝夕学学.这里主要是为了方便我自己回顾查询 创建Winform程序 Program类 Winform项目结构介绍 Winform控件简 ...

  6. 08_N叉树的层序遍历

    N叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历.(即从左到右,逐层遍历). 树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例). 示例 1: 输入:root = [ ...

  7. 小白学标准库之 http

    1. 前言 标准库是工具,是手段,是拿来用的.一味的学标准库就忽视了语言的内核,关键.语言层面的特性,内存管理,垃圾回收.数据结构,设计模式.这些是程序的内核,要熟练,乃至精通它们,而不是精通标准库. ...

  8. 【SHELL】命令补全

    # 指定文件 dodo_path=/home/skull/work/scripts/dodo echo "hello skull" ## COMP_WORDS 是一个 bash 内 ...

  9. python环境 anaconda安装

    官网: https://www.anaconda.com/distribution/#macos 国内镜像: https://mirrors.tuna.tsinghua.edu.cn/anaconda ...

  10. Spring——静态/动态代理模式

    代理模式 代理模式: 静态代理 动态代理 学习aop之前,要先了解代理模式 静态代理 抽象角色:一般使用接口或者抽象类来实现 真实角色:被代理的角色 代理角色:代理真实角色:代理真实角色后,一般会做一 ...