1、RibbitMq的安装
1、通过Docker方式安装
1、在Centos中安装docker
文档:https://docs.docker.com/engine/install/centos/
1、卸载之前的老版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、设置安装的源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3、安装
sudo yum install -y docker-ce docker-ce-cli containerd.io
4、启动
sudo systemctl start docker
5、设置开机自启动
sudo systemctl enable docker
2、安装RabbitMq
- —name 容器名称
- -e RABBITMQ_DEFAULT_USER 用户名
- -e RABBITMQ_DEFAULT_PASS 密码
- 15672是管理后台端口
5672是api端口
docker run -dit --name rabbitmq -e RABBITMQ_DEFAULT_USER=djl -e RABBITMQ_DEFAULT_PASS=Djl12367 -p 15672:15672 -p 5672:5672 rabbitmq:management
2、通过其他方式安装
-
2、MQ的应用场景
秒杀订单的消峰,队列排队消费
延迟多久时间触发业务
引入spring-boot-starter-amqp
<!--rabbitmq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2、配置yaml
spring: rabbitmq: host: ip地址 port: 5672 username: djl password: Djl12367 publisher-confirm-type: correlated #消息发送到MQ消息确认机制 是否确认回调 publisher-returns: true #消息发送到MQ消息确认机制 是否返回回调 listener: simple: acknowledge-mode: manual #手动应答消费了 concurrency: 1 #最小的消费者数量 max-concurrency: 1 #最大的消费者数量 retry: enabled: true #允许重新发送
3、创建队列等
1、创建秒杀配置类Properties
@ConfigurationProperties(prefix = "seat.mq.seckill") @Data public class RabbitMqSeckillProperties { /** * 队列名称 */ private String queue; /** * 交换机 */ private String exchange; /** * 路由键 */ private String routingKey; }
2、配置yaml
seat: mq: seckill: queue: amq_queue_seat_seckill #秒杀队列名称 exchange: amp.direct.exchange.seat.seckill #秒杀交换机 routing-key: amq.direct.routing.seat.seckill #秒杀路由键
3、创建RabbitMqSeckillConfig
创建队列,路由键,交换机
- 注意队列的名称不能有. ```java package com.seat.mq.config;
import com.seat.mq.properties.RabbitMqSeckillProperties; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
/**
- @author djy
- @createTime 2022/1/26 下午11:50
- @description RabbitMQ秒杀队列配置 */ @Configuration @EnableConfigurationProperties(RabbitMqSeckillProperties.class) public class RabbitMqSeckillConfig {
@Autowired
private RabbitMqSeckillProperties properties;
/**
* 秒杀队列
* @return
*/
@Bean
public Queue seatSeckillQueue() {
// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般设置一下队列的持久化就好,其S余两个就是默认false
return new Queue(properties.getQueue(),true);
}
/**
* 秒杀交换机
* @return
*/
@Bean
DirectExchange seatDirectExchange() {
return new DirectExchange(properties.getExchange(),true,false);
}
/**
* 秒杀绑定 将队列和交换机绑定, 并设置用于匹配键:amq.direct.routing.seat
* @return
*/
@Bean
Binding bindingDirect() {
return BindingBuilder.bind(seatSeckillQueue()).to(seatDirectExchange()).with(properties.getRoutingKey());
}
}
<a name="G4DQT"></a>
### 4、创建发送端
<a name="j2bMd"></a>
#### 1、创建基础类
<a name="cXp9y"></a>
# 4、安装延迟插件
<a name="PiChJ"></a>
## 1、下载延迟插件
<a name="fMsxm"></a>
### 1、直接用github下载ez后缀的文件
[https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases](https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases)<br />
<a name="AuSzx"></a>
### 2、从官网下载
[https://www.rabbitmq.com/community-plugins.html](https://www.rabbitmq.com/community-plugins.html)<br />
<a name="jtYqp"></a>
### 3、下载的文件

<a name="NmV3y"></a>
## 2、docker安装的rabbitmq
<a name="WzaeX"></a>
### 1、查看docker中plugins的目录
```shell
docker exec -it rabbitmq /bin/bash
root@7fd1b216d7c8:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt plugins proc root run sbin srv sys tmp usr var
2、可以看到在根目录的plugins中
使用命令把主机中的插件文件cp进docker中
docker cp 主机文件 容器:容器目录
- 示例 ```shell docker cp /mydata/rabbitmq插件/rabbitmq_delayed_message_exchange-3.9.0.ez Myrabbitmq:/plugins
<a name="MNrZE"></a>
### 3、使用命令安装
- 启用延迟队列
```shell
rabbitmq-plugins enable rabbitmq_delayed_message_exchange