RabbitMQ

本文介绍了RabbitMQ作为消息中间件的作用,包括异步处理、应用解耦和流量消峰。详细讲解了RabbitMQ的安装、创建虚拟节点、五种消息模式(一对一、工作队列、发布订阅、Fanout、Direct、Topic)以及死信队列的使用。同时,还阐述了RabbitMQ的Ack机制,并展示了SpringBoot整合RabbitTemplate的配置和使用。
摘要由CSDN通过智能技术生成

RabbitMQ消息中间件

RabbitMQ介绍与安装

1.RabbitMQ的介绍
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(也称为消息的中间件)。AMQP(Advanced Message Queuing Protocol)高级消息队列协议:客户端向MQ发送的消息协议是AMQP协议。JMS(Java Message Server)一样,都是一种消息规范,相比而言可定是AMQP高级一些。
2.MQ的功能
1)异步处理:把用户的请求发送给消息中间件后,消息中间件会先进行局部响应,不需要用户等待。
2)应用解耦:模块和模块之间没有强耦合,都是通过某个中间件进行连接的
3)流量消峰:在某一段时间内,突然发生了高并发,如果某个服务器承受不住,那么添加中间件就会将当前的请求存储到队列中,一个一个处理,不会全部直接请求服务器保证了服务器的安全性。
没有添加消息中间件:
请添加图片描述
添加消息中间件
请添加图片描述
AMQP和JMS区别:
JMS是定义一套java接口,对消息处理进行了统一操作,但是AMQP是通过规定协议的方式统一数据交互的。JMS必须使用java语言操作,AMQP只是协议,不是实现代码,跨语言的。
JMS中只定义了两种消息模式,但是AMPQ消息模式很多,很丰富。
使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、ZeroMQ、kafka、MetaMQ、RocketMQ
ActiveMQ:apache公司的
Kafka:一般大数据领域应用多,吞吐量达,不用考虑数据安全性
RecketMQ:是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,安全性能好。(推荐使用RabbitMQ,RabbitMQ用的是AMQP协议)。
请添加图片描述

创建虚拟节点

RabbitMQ管理平台默认地址:http://localhost:15672
默认用户名和密码是:guest和guest,最好不要用整个用户操作。
1、使用guest登陆后,选择admin,创建一个新用户xxx。
在这里插入图片描述2、创建虚拟节点/hello请添加图片描述
3、添加成功
请添加图片描述
4、设置虚拟节点的权限(给哪个用户用)

请添加图片描述

RabbitMQ五种消息模式

RabbitMQ提供了五种消息模型(其实一共7种,第六种RPC远程服务调用,第七种发布确认)以下只解释了五种,基本消息模式,工作队列模式,Fanout订阅模式,Direct订阅模式,Topic订阅模式。

编写客户端连接RabbitMQ服务器

生产者与消费者模式(一对一)

1.创建工程
2.导入RabbitMQ依赖

<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>5.9.0</version>
</dependency>

3.编写连接工具类

public class RabbitMQUtil {
   
    /**
     * 就是封装以下我们获取连接的步骤:
     * @throws IOException
     * @throws TimeoutException
     */
    public static Connection getConnection() throws IOException, TimeoutException {
   
        //1.创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //2.设置连接地址  我使用的windows 所以是localhost
        connectionFactory.setHost("localhost");
        //3.端口号 ,因为是java客户端,所以用amqp协议
        connectionFactory.setPort(5672);
        //4.设置用户名,密码 , 虚拟节点名
        connectionFactory.setVirtualHost("/hello");
        connectionFactory.setUsername("Gyz");
        connectionFactory.setPassword("123123");

        Connection connection = connectionFactory.newConnection();

        return connection;
    }
}

4.端口号解释

Protocol Boundto Port
ampq(高级消息队列协议) :: 5672(java客户端连接)
clustering :: 25672(集群)
http :: 15672(浏览器访问)

5.编写案例:Hello World
请添加图片描述

工作队列模式

1.如果先运行消息的提供方,在运行消息的消费方,谁优先启动,谁就直接获取了所有的消息
2.如果我们先把两个消费者方启动后,监听消息的提供方,提供数据的时候,那么我们两个消费方就会均匀的拿取数据,因为RabbitMQ属于轮询方式发送消息,所以RabbitMQ会自动把数据分配好
3.如果我们先把两个消费者方启动后,在提供数据,有一个消费者出现了阻塞状态,可以设置成能者多劳的模式,要出现这个模式的前提要关闭ack自动确认机制,在使用channel.basicQos(1),设置每次拿一个消息,消费一个后再去拿第二个,当出现阻塞的时候就不会出现第二种情况
请添加图片描述
能者多劳模式的运行结果

消费者1 接收的信息为:1:  地瓜地瓜 我是土豆
消费者1 接收的信息为:3:  地瓜地瓜 我是土豆
消费者1 接收的信息为:5:  地瓜地瓜 我是土豆
消费者1 接收的信息为:6:  地瓜地瓜 我是土豆
消费者1 接收的信息为:8:  地瓜地瓜 我是土豆
消费者1 接收的信息为:9:  地瓜地瓜 我是土豆
消费者1 接收的信息为:11:  地瓜地瓜 我是土豆
消费者1 接收的信息为:12:  地瓜地瓜 我是土豆
消费者1 接收的信息为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值