Linux环境安装并使用RabbitMQ-保姆级别教程

1,810 阅读3分钟

下载和安装

官网下载页面

官方下载地址: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

地址:http://服务器ip:15672

# 添加用户
 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--> 查找配置文件模版

www.rabbitmq.com/install-rpm…

www.rabbitmq.com/configure.h…

github.com/rabbitmq/ra…

需要修改其他配置,可以新增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,主要目的用于定义并且创建交换机与队列,并且对他们进行绑定。主要步骤如下:

  1. 定义交换机的名称
  2. 定义队列的名称
  3. 创建交换机
  4. 创建队列
  5. 队列绑定交换机
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);
            // 处理存储等业务逻辑
        }
    }
}

如果能打印出消息内容,大功告成~