热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(云原生)一文搞懂rabbitMQ消息队列概述

目录序前言概念简述一,控制台概念概念一览图控制台上下级关系简图二,消息传输模型消息模型一览图三,实践应用1.配置文件2.

目录

前言

概念简述

一,控制台概念

概念一览图

控制台上下级关系简图

 二,消息传输模型

消息模型一览图

 三,实践应用

1. 配置文件

2. 生产者

3. 消费者

配置一览图

写到最后





由于公司生产环境使用了MQ消息中间件,并且项目中同时使用了rabbitMq和rocketMq两种技术框架,时常将它们之间的使用方式和相关概念混淆。根本的原因是没有深入理解每一种mq,仅仅停留在项目已经造好的轮子不假思索的使用


前言

首先对rabbitMq的相关概念进行梳理,rocketMq将在另一篇文章中展现:一文搞懂rocketMQ消息队列概述(敬请期待...)。


概念简述

根据博主自己的理解

将从三个方面对rabbitMq的相关概念进行概述


  • 控制台概念
  • 消息传输模型
  • 实践应用

一,控制台概念


本段参考阿里云控制台rabbitMQ控制台配置



概念一览图


  • 队列实例

一个独立的消息队列RabbitMQ版资源实体,包含Vhost、Exchange、Queue等基本的资源要素



  • 虚拟主机 vhost

用作逻辑隔离,分别管理各自的Exchange、Queue和Binding,使得应用安全地运行在不同的Vhost上,相互之间不会干扰。一个实例下可以有多个Vhost,一个Vhost里面可以有若干个Exchange和Queue。Producer和Consumer连接消息队列RabbitMQ版需要指定一个Vhost



  • 交换机 exchange

Producer将消息发送到Exchange,由Exchange将消息路由到一个或多个Queue中(或者丢弃)。Exchange根据Routing Key和Binding Key将消息路由到Queue。不同类型的Exchange的路由规则不同。

交换机类型 exchangeType:

1. fanout-分列模式

会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中,相当于广播功能。

2. direct-直接模式

该类型路由规则会将消息路由到Binding Key与Routing Key完全匹配的Queue中

Binding Key(绑定键):消息队列控制台设置。(注:定义规则可参考阿里云。下同

Routing Key(路由键):在客户端端设置参数,与消息体一并发送到队列中(下同)

3. topics-主题模式

使用Routing Key模式匹配和字符串比较的方式将消息路由至绑定的Queue中。通俗的理解就是routing key模糊匹配绑定在队列上的biding key。

注:阿里云版rabbitMq的实现方式选择的开源版本其中一类消息模型 发布/订阅传输模型 所以 exchange 这层不可少



  • 队列 queue

消息最终在服务器存储的地方,消息队列的消息都会被投入到一个或多个Queue中



控制台上下级关系简图


 二,消息传输模型

一般消息队列的传输模型可分为两大类


  • 点对点传输模型简述:一条消息只能被一个消费者消费
  • 发布/订阅模型简述:一条消息可以被多个已经订阅的消费者消费

rabbitMQ消息模型一般细分为5种

1. 基本模型(点对点)

简述:生产者发送消息到队列,一个队列只能被一个消费者订阅


 


2.  任务模型(点对点)

简述:生产者发送消息到队列,一个队列可以被多个消费者订阅,并且队列中的一条消息只能被消费一次

注:在该消息模式下可设置负载均衡将消息合理的分配到不同的消费者,以及其他规则进行合理配置使用



3. 发布/订阅模型(发布/订阅)

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,消费者只要进行了订阅,那么交换机下的队列消息都能可以消费一条消息可以被不同的订阅消费者重复消费 (同下)


 


4. routing-路由模式(发布/订阅)

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者通过routing key发送消息到与 binding key完全相等的 队列中,消费者订阅交换机下的队列进行消费



5. topics-主题模式 (发布/订阅) 

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者的routing key通过规则表达式 发送消息到包含与 binding key满足的 队列中,消费者订阅交换机下的队列进行消费




消息模型一览图


 三,实践应用


注:下面为客户端应用中大致需要的配置参数以及简述,根据不同的业务需要作出调整,本文列出一般情况方便后续使用时有所方向。



1. 配置文件


  • host-实例地址:服务器地址或服务商控制台中的vpn/公网ip地址(控制台获取)
  • port:端口(控制台获取)
  • username:静态用户名(控制台获取)
  • password:密码(控制台获取)
  • queue:某个消费者需要监听的队列名(控制台获取
  • 消费者监听的自定义类名(客户端获取)

2. 生产者


  • exchange:交换机名(控制台获取)
  • routing key:路由键(控制台获取)
  • messageBody:消息体(客户端自定义)
  • messageId:消息唯一键(客户端自定义)

3. 消费者


  • 自定义消费者监听类



配置一览图


 注:rabbitMq项目实践流程可移步到Springboot 整合 阿里云消息队列RabbitMQ版服务 ,从零搭建消息队列基础项目。





写到最后

至此rabbitMq消息队列的相关整理告一段落,在自己加深理解的同时也能帮助到小伙伴。



同时对rocketMq消息队列感兴趣的,可移步到:一文搞懂rocketMQ消息队列概述(敬请期待...)


推荐阅读
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • BZOJ1233 干草堆单调队列优化DP
    本文介绍了一个关于干草堆摆放的问题,通过使用单调队列来优化DP算法,求解最多可以叠几层干草堆。具体的解题思路和转移方程在文章中进行了详细说明,并给出了相应的代码示例。 ... [详细]
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
author-avatar
紫藤雨2502915477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有