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. Java 中初始化 List 的五种方法

    1.构造 List 后使用 List.add 初始化 1 List<String> stringList = new LinkedList<>(); 2 stringList. ...

  2. Spring自带的Objects等工具类(减少繁琐代码)

    断言: AssertUtils assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启 SpringBoot 中提供了 Assert 断言工具类,通常 ...

  3. webservice(AXIS)客户端生成方法

    如何根据apache的axis生成的WebServices服务接口生成客户端代码一.下载axis-bin-1_4.zip    官网下载地址:    https://mirrors.bfsu.edu. ...

  4. vue学习笔记 十七、父子组件 ---> 子组件传值

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  5. qsort函数使用方法总结(详细全面+代码)

    目录 qsort函数原型 compar参数 int 数组排序 结构体排序 字符串指针数组排序 字符串二维数组排序 整型二维数组(力扣题目) qsort函数原型 void qsort( void *ba ...

  6. Java虚拟机——类加载器深入剖析

    一.java虚拟机与程序的生命周期 在如下几种情况下,java虚拟机将结束生命周期: 1.执行了System.exit()方法 2.程序正常执行结束 3.程序在执行过程中遇到了异常或错误而异常终止 4 ...

  7. paddlespeech asr脚本demo

    概述 paddlespeech是百度飞桨平台的开源工具包,主要用于语音和音频的分析处理,其中包含多个可选模型,提供语音识别.语音合成.说话人验证.关键词识别.音频分类和语音翻译等功能. 本文介绍利用p ...

  8. bootstrap : 解决使图片全屏显示有空白边距的问题

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8 ...

  9. [转帖]已整理-shell内置字符串常用操作

    https://www.cnblogs.com/reachos/p/16803672.html bash 里面内置了一些常用的字符串操作: 1.字符串截取 a="abc" ${a: ...

  10. [转帖]TIKV扩容之刨坑填坑​

    01 背景 某tidb集群收到告警,TIKV 节点磁盘使用率85%以上,联系业务无法快速删除数据,于是想到扩容TIKV 节点,原先TIKV 节点机器都是6TB的硬盘,目前只有3TB的机器可扩,也担心r ...