Linux环境安装并使用RabbitMQ-保姆级别教程
站长
· 阅读数 11
下载和安装
官网下载页面
官方下载地址:www.rabbitmq.com www.rabbitmq.com/download.ht…
erlang版本匹配
erlang 版本如果不在匹配期间内,安装会报错:
rpm 安装介绍
页面地址:www.rabbitmq.com/install-rpm…
确认安装环境
查看机器内核
/etc/redhat-release
这边的安装环境是: Alibaba Cloud Linux ,可以根据自己的系统下载相应的版本
下载安装 erlang
安装erlang命令:
rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
yum install erlang -y
查看erl版本命令:
erl -version
查看具体erl的版本命令:
erl
将看到Erlang/OTP 22这样一行信息,说明erlang版本为Erlang/OTP 22 然后通过 www.rabbitmq.com/which-erlan… 找到对应兼容rabbitmq的版本号,然后选择版本进行下载rabbitmq,我这边下载的rabbmit版本号为3.8.3
创建目录:
mkdir /usr/local/rabbitmq
下载rabbitmq
下载rabbitmq命令:
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server-3.8.3-1.el7.noarch.rpm
安装rabbitmq
RabiitMQ需要依赖socat,需要先安装一下:
yum install -y socat
解压并安装RabbitMQ:
rpm -Uvh rabbitmq-server-3.8.3-1.el7.noarch.rpm
yum install -y rabbitmq-server
启动rabbitmq
启动rabbitmq命令:
systemctl start rabbitmq-server
查看状态
systemctl status rabbitmq-server
开机自启动:
systemctl enable rabbitmq-server
停止
systemctl stop rabbitmq-server
重启
systemctl restart rabbitmq-server
开启admin 管理
rabbitmq-plugins enable rabbitmq_management
登录访问
阿里云服务器需注意开启端口,设置安全组 15672、5672
# 添加用户
rabbitmqctl add_user admin metaports
# 设置用户角色,分配操作权限
rabbitmqctl set_user_tags admin administrator
# 为用户添加资源权限(授予访问虚拟机根节点的所有权限)
rabbitmqctl set_permissions -p "/" metaports ".*" ".*" ".*"
然后需要重启rabbitmq-server
systemctl restart rabbitmq-server
顺利登陆
页面方式添加admin
添加新的管理员用户admin:
给admin提供权限:
直接点击set即可:
创建 virtual-host
配置文件模版
ps--> 查找配置文件模版
需要修改其他配置,可以新增rabbitmq.conf文件做修改,放到服务器上去
SpringBoot中配置使用
配置
SpringBoot 默认自带 RabbitMQ,所以整合的时候则可以直接引入rabbitmq的依赖:
pom.xml 引入依赖:
<!-- 引入 rabbitmq 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置yml:
spring:
rabbitmq:
host: 192.168.1.1
port: 5672
username: admin
password: admin
virtual-host: rabb-dev-host
代码实现
新增RabbitMQConfig.java,主要目的用于定义并且创建交换机与队列,并且对他们进行绑定。主要步骤如下:
- 定义交换机的名称
- 定义队列的名称
- 创建交换机
- 创建队列
- 队列绑定交换机
package com.metaports.app.base;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
public static final String EXCHANGE_MSG = "exchange_msg";
public static final String QUEUE_SYS_MSG = "queue_sys_msg";
@Bean(EXCHANGE_MSG)
public Exchange exchange() {
return ExchangeBuilder // 构建交换机
.topicExchange(EXCHANGE_MSG) // 使用topic类型,参考:https://www.rabbitmq.com/getstarted.html
.durable(true) // 设置持久化,重启mq后依然存在
.build();
}
@Bean(QUEUE_SYS_MSG)
public Queue queue() {
return new Queue(QUEUE_SYS_MSG);
}
@Bean
public Binding binding(@Qualifier(EXCHANGE_MSG) Exchange exchange,
@Qualifier(QUEUE_SYS_MSG) Queue queue) {
return BindingBuilder
.bind(queue)
.to(exchange)
.with("sys.msg.*") // 定义路由规则(requestMapping)
.noargs();
}
}
创建生产者消息:
@PostMapping("msgProduce")
public Object MsgProduce() {
rabbitTemplate.convertAndSend(
RabbitMQConfig.EXCHANGE_MSG,
"sys.msg.chat",
"我发送了一个聊天消息~~");
return "发送成功";
}
消费者接收消息:
package com.metaports.app;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.metaports.app.base.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@Slf4j
@Component
public class RabbitMQConsumer {
@RabbitListener(queues = {RabbitMQConfig.QUEUE_SYS_MSG})
public void watchQueue(String payload, Message message) {
log.info(payload);
String routingKey = message.getMessageProperties().getReceivedRoutingKey();
log.info(routingKey);
if(routingKey.equalsIgnoreCase("sys.msg.chat")) {
Map<String, Object> messageMap = (Map<String, Object>) JSONObject.parse(payload);
// 处理存储等业务逻辑
}
}
}
如果能打印出消息内容,大功告成~