RabbitMQ--详情概述

news2024/11/23 16:54:27

一、消息队列(Rabbit Message Queue) 

1、概念

消息队列是一种应用之间的通信方式,消息发送之后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只发布消息到MQ,消息使用者值从MQ中拿消息,两者不知道对方的存在。

简单来说:MQ是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。

 2、MQ的特性

应用解耦,异步提速,削峰填谷。

系统的耦合度越高,容错性就越低,难维护。使用 MQ 使得应用间解耦,提升容错性和可维护性

二、MQ的安装

1、安装依赖环境

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

 2、安装Erlang(https://www.erlang.org/downloads)

下载erlang的tar包,上传至虚拟机,进行解压

tar -zxvf otp_src_19.3.tar.gz

3、安装RabbitMQ(https://www.rabbitmq.com/download.html

rpm -ivh --nodeps rabbitmq-server-3.7.2-1.el7.noarch.rpm

 4、开启管理界面及配置

开启管理界面
rabbitmq-plugins enable rabbitmq_management4
修改默认配置信息
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 

5、RabbitMQ的启动和关闭

启动服务:service rabbitmq-server start 
停止服务:service rabbitmq-server stop 
重启服务 :service rabbitmq-server restart 

cd /usr/share/doc/rabbitmq-server-3.6.5/

cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

6、用户角色

RabbitMQ 安装成功后使用默认用户名 guest 登录
账号: guest    密码:guest

7、用户角色

添加用户: rabbitmqctl add_user {username} {password}
rabbitmqctl add_user root root
删除用户: rabbitmqctl delete_user {username}
修改密码: rabbitmqctl change_password {username} {newpassword}
rabbitmqctl change_password root 123456
设置用户角色: rabbitmqctl set_user_tags {username} {tag}
rabbitmqctl set_user_tags root administrator
tag 参 数 表 示 用 户 角 色 取 值 为 : management monitoring policymaker administrato

超级管理员(administrator):

可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。

监控者(monitoring)

可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

策略制定者(policymaker)

可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)

普通管理者(management)

仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。

三、RabbitMQ消息发送与接收

1、消息的模式

P:生产者——>创建消息,然后发布到队列 、C:消费者 ——>获得消息

 红框框queue:消息队列——>可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

2、高级消息队列协议(AMQP)

它是一个网络协议,是应用层协议 的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间件不同产品,不同的开发语言等条件的限制。

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

Binding :绑定,用于消息队列和交换器之间的关联。exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到exchange 中的查询表中,用于message 的分发依据。

Queue 消息队列,用来保存消息直到发送给消费者,消息最终被送到这里等待 consumer 取走

Connection :网络连接,比如一个 TCP 连接。

Channel: 信道,多路复用连接中的一条独立的双向数据流通道,Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯、AMQP method 包含了channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。

Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,连接时必须指定RabbitMQ 默认的 vhost 是 / 。

Broker :接收和分发消息的应用

四、RabbitMQ工作模式

1. 简单模式

一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。

2. 工作队列模式 Work Queue

一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。

3. 发布订阅模式 Publish/subscribe

需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。

4. 路由模式 Routing

需要设置类型为 direct 的交换机,交换机和队列进行绑定,并且指定 routing key,当发送消息到交换机后,交换机会根据 routing key 将消息发送到对应的队列。

5. 通配符模式 Topic

需要设置类型为 topic 的交换机,交换机和队列进行绑定,并且指定通配符方式的 routing key,当发送消息到交换机后,交换机会根据 routing key 将消息发送到对应的队列。

五、SpringBoot整合RabbitMQ

1、导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2、编写配置文件

spring:
  rabbitmq:
    host: 192.168.88.99 #主机ip
    port: 5672 #端口
    username: guest
    password: guest
    virtual-host: /

 3、定义监听类,使用@RabbitListener注解完成队列监听。

消费者consumer

@Component
public class RabbimtMQListener {
    @RabbitListener(queues = "bootQueues")
    public void ListenerQueue(Message message){
        //System.out.println(message);
        System.out.println(new String(message.getBody()));
    }

}

生产者

@Configuration
public class RabbitMQConfig {

    public static final String EXCHANGE_NAME = "bootTopicExchange";
    public static final String QUEUE_NAME = "bootQueues";

    //1.交换机
    @Bean("bootExchange")
    public Exchange bootExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }

    //2.Queue 队列
    @Bean("bootQueue")
    public Queue bootQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    //3. 队列和交互机绑定关系 Binding
    /*
        1. 知道哪个队列
        2. 知道哪个交换机
        3. routing key
     */
    @Bean
    public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
}

测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class ProducerTest {
    //1.注入RabbitTemplate
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.haha","boot mq hello~~~");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel——限流规则

目录 快速入门 簇点链路 案例 流控模式 流控模式——关联 流控模式——链路 案例 流控效果 流控效果——warm-up 流控效果——排队等待 热点参数限流 快速入门 簇点链路 簇点链路&#xff1a;就是项目内的调用链路&#xff0c;链路中被监控的每个接口就是一个资源。…

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

[前端基础]异步操作(还没写完)

1.写在前面 这篇是因为最近再写异步操作,需要点总结 因为还在学习前端的过程中嘛,所以有些东西可能会慢慢补充上来,也可能会有很多个人理解不是很到位的地方,还望各位评论区佬能帮忙指出.阿里嘎多捏 2.异步操作的概念和举例 异步操作和同步操作在408的三门课程中,都有所提及…

基于php的校园垃圾分类网站的设计与实现

摘要 近年来&#xff0c;随着民众环保意识的增强和资源有效利用问题的重视&#xff0c;全国各地市不断推进垃圾分类工作。教育部&#xff0c;也已于去年发布通知在全国各学校推进垃圾分类工作&#xff0c;以鼓励垃圾分类的有效实施。但现阶段我国校园的垃圾分类践行情况依旧问…

STATS 782 - Control Flow and Functions

文章目录 一、Control Flow1. If-Then-Else2. Loops 二、Functions1. Defining Functions2. 使用函数计算数学公式 总结 一、Control Flow 1. If-Then-Else > if (x > 0) y sqrt(x) else y -sqrt(-x)或 > y if (x > 0) sqrt(x) else -sqrt(-x)2. Loops ① fo…

数组应该怎么用?

文章目录 前言一、数组是什么&#xff1f;二、数组的创建1.数组的创建&#xff1a;2.数组的初始化 三.数组的遍历1.逐个打印2.使用for循环四.二维数组1.语法&#xff1a;2.遍历 五.数组的一些常用方法1.数组转换字符串2.数组拷贝3.二分查找4.冒泡排序5.数组逆序 总结 前言 为什…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括&#xff1a; 原生方式&#xff0c;使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

_awt_container容器_演示

Component作为基类&#xff0c;提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置&#xff0c;大小。…

基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; 目录 1 ACO-BP算法 2 ACO-BP算法基本思路 3 具体步骤 4 运行结果 ​ 5 参考文献 6 Matlab代码实现 1 ACO-BP算法 传统的…

数组模拟实现单链表快速操作

前言&#xff1a;我们都知道链表的一般模式是由结构体加指针来实现的&#xff0c;但是在实际的比赛中&#xff0c;结构体指针来实现链表的操作并不常用&#xff0c;原因是因为我们在增加节点时需要开辟新的内存&#xff0c;而比赛时给出的样例大多都是十几万个数据&#xff0c;…

安装配置SVN版本控制管理工具

SVN工具能帮我们做什么&#xff1f; 核心功能&#xff1a;文档版本管理系统 适合对象&#xff1a;个人与团队都可以使用&#xff0c;企业中项目资源的重要管理工具 举例&#xff1a;一个文件夹里面的文档管理 1.下载安装SVN服务器 VisualSVN-Server 2.下载安装SVN客户端 T…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库&#xff0c;不需要魔法&#xff0c;点击这里注册 &#x1f680;贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法&#xff1a; 基于代价滤波的方法可以在c…

大小字母转换

1.代码实例: public class UpString { public static void main(String[] args) { if(args!null && args.length 1){ String str new String(args[0]); System.out.println(“原字符&#xff1a;” str “\n”); String newA str.toUpperCase(); System.out.prin…

C语言分支和循环语句

目录 1.什么是语句&#x1f60a; 2.分支语句&#xff08;选择结构&#xff09;&#x1f60a; 2.1 if语句&#x1f43e; 2.2 switch语句&#x1f43e; 3.循环语句 &#x1f60a; 3.1 while循环&#x1f43e; 3.2 for循环&#x1f43e; 3.3 do...while()循环&#x1f43e…

太太太太太卷了,累了

我们聊到互联网行业的时候&#xff0c;一个不可避免的话题就是“内卷” 在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…

春秋云境:CVE-2022-25401(任意文件读取漏洞)

目录 一、题目 二、curl访问flag文件 一、题目 介绍&#xff1a; Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 进入题目 是一个登录页面 sql和暴破都无解。 官方POC 国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 …

初阶数据结构之顺序表的增删查改(二)

文章目录 [TOC](文章目录) 前言一、顺序表1.1顺序表的概念1.2顺序表的分类1.3、顺序表的接口定义 二.顺序表的完整实现2.1代码的完成实现 总结 前言 线性表的含义&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种…

CSAPP第五章 面向编译器的优化(2)

回顾 先复习一下之前的东西。 练习5.7 我们可以看到&#xff0c;相比combine4生成的基于指针的代码&#xff0c;GCC使用了C代码中数组引 用的更加直接的转换。循环索引i在寄存器rdx中&#xff0c;data的地址在寄存器rax中。和 前面一样&#xff0c;累积值acc在向量寄存器xm…