rabbitmq
卸载以前安装的版本
# 卸载rabbitmq
/sbin/service rabbitmq-server stop
yum list | grep rabbitmq
yum -y remove rabbitmq-server.noarch
rm -rf /var/lib/rabbitmq
# 卸载erlang
yum list | grep erlang
yum -y remove erlang-*
yum remove erlang.x86_64
rm -rf /usr/lib64/erlang
查看linux版本号
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ lsb_release -a
安装erlang
# 下载合适的版本:https://github.com/rabbitmq/erlang-rpm/releases
# rabbitmq3.8.4开始要求erlang版本在23.2以上
# el8对应centos8,el7对应centos7
# 下载
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ wget https://github.com/rabbitmq/erlang-rpm/releases/download/v24.0.2/erlang-24.0.2-1.el8.x86_64.rpm
# 配置可执行权限
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ chmod +x erlang-24.0.2-1.el8.x86_64.rpm
# 安装
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo rpm -ivh erlang-24.0.2-1.el8.x86_64.rpm
# 一路按 Y 就行...
# 查看安装是否成功
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ erl
# halt(). 命令可退出erl 控制台
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ halt().
安装rabbitmq
# 下载合适的版本:https://www.rabbitmq.com/install-rpm.html#downloads
# 本次安装版本为:3.8.16
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.16/rabbitmq-server-3.8.16-1.el8.noarch.rpm
# 安装
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo yum install rabbitmq-server-3.8.16-1.el8.noarch.rpm
# 一路按 Y 就行...
运行rabbitmq
# 启动服务
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo systemctl start rabbitmq-server.service
# 停止服务
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo systemctl stop rabbitmq-server.service
# 查看状态
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo systemctl status rabbitmq-server.service
启动UI插件
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo rabbitmq-plugins enable rabbitmq_management
# 查看用户
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo rabbitmqctl list_users
# 刚开始只有一个 guest 用户,而 guest 用户只能支持本地登录,因此我们需要手动添加一个用户
# 添加用户 rabbitmqctl add_user {username} {password}
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo rabbitmqctl add_user admin admin2021
# 用户创建完成需要赋予administrator权限,否则无法登录管理控制台
# 设置权限 rabbitmqctl set_user_tags {username} administrator
[backend@iZ8vb0jkzcfe058of4yto0Z rabbitmq]$ sudo rabbitmqctl set_user_tags admin administrator
# 设置用户访问目录的权限,如果不设置,则会报:access to vhost '/' refused for user 'admin' 错误
[backend@iZ8vb0jkzcfe058of4yto0Z middleware]$ sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
配置安全组
需要开放两个端口:
15672 网页访问端口
5672 AMQP端口
访问管理控制台
访问地址:http://xxxx:15672/#/
账号:admin
密码:admin2021
springboot 整合 rabbitmq
1. pom文件
<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2. yml文件
spring:
rabbitmq:
# 集群地址,用逗号分隔
addresses: xxxx:5672
connection-timeout: 15000
username: admin
password: admin2021
# 使用启用消息确认模式
publisher-confirm-type: correlated
virtual-host: /
3. 配置文件
package com.rj.seckill.config.rabbitmq;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DirectRabbitConfig {
/**
* 交换机
*/
@Bean
public DirectExchange myDirectExchange() {
// name: 交换器名称
// durable: true 是否持久化
// autoDelete: 自动删除
return new DirectExchange("myDirectExchange", true, false);
}
/**
* 队列
*/
@Bean
public Queue myDirectQueue() {
return new Queue("myDirectQueue", true);
}
/**
* 绑定
*/
@Bean
public Binding bindingDirect() {
return BindingBuilder.bind(myDirectQueue())
.to(myDirectExchange())
.with("my.direct.routing");
}
}
4. 消息生产者
package com.rj.seckill.controller;
import com.rj.seckill.entity.SysUserEntity;
import com.rj.seckill.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Api() 只有使用此注解修饰类,才能在swagger页面看到接口文档
* */
@Controller
@RequestMapping("/rabbitmq")
@Api("测试rabbitmq接口")
public class RabbitMqController {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 测试 rabbitmq 消息发送者
* @ApiOperation() 定义接口名称
* @Valid 开启参数校验
*/
@PostMapping("/producer")
@ResponseBody
@ApiOperation("测试 rabbitmq 消息发送者")
public R getUserListByPage() {
String msg = "hello world!";
rabbitTemplate.convertAndSend("myDirectExchange", "my.direct.routing", msg);
return R.ok();
}
}
5.查看消息是否发送成功
登录管理控制台,查看消息队列