Linux安装配置并使用RabbitMQ

385 阅读3分钟

一、RabbitMQ安装

1. 安装C++依赖环境 使用gcc编译工具及库文件

yum -y install gcc gcc-c++ glibc-devel make ncurses-devel openssl openssl-devel xmlto perl wget java java-devel

2.安装Erlang环境 RabbitMQ依赖于Erlang,需要先安装Erlang,两者之间的版本对应关系www.rabbitmq.com/which-erlan…

cd /usr/local
wget http://erlang.org/download/otp_src_25.0.tar.gz
tar -zxvf otp_src_25.0.tar.gz
mkdir /usr/local/erlang
cd /usr/local/otp_src_25.0
./configure --prefix=/usr/local/erlang
make && make install

如果有提示缺少其他的依赖包,则按提示安装 命令:yum install -y [缺少的依赖]

3. 安装RabbitMQ

下载rabbitmq-server-generic-unix-3.10.7.tar.xz,然后上传到服务器中的文件夹/usr/local/rabbitmq。

cd /usr/local/
mkdir rabbitmq
cd rabbitmq/

访问网址github.com/rabbitmq/ra…进行下载,使用Xftp等工具进行上传。

解压RabbitMQ

tar -xvf rabbitmq-server-generic-unix-3.10.7.tar

二、RabbitMQ配置

1. 进入/etc/profile配置环境变量

vim /etc/profile

添加以下内容

# erlang
export PATH=$PATH:/usr/local/erlang/bin
# rabbitmq
export PATH=$PATH:/usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin

使环境变量/etc/profile生效,命令:

source /etc/profile

输入erl,若结果会出现版本信息,则Erlang安装成功。

2. 开启RabbitMQ管理权限

cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
./rabbitmq-plugins enable rabbitmq_management

3. 启动RabbitMQ

cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
./rabbitmq-server start
# 或者
./rabbitmq-server -detached

若结果出现Rabbitmq的版本信息,且最后显示为“Starting broker... completed with 3 plugins.”,则Rabbitmq安装成功。

4. 使用RabbitMQ

创建用户分配权限 因guest用户只能在本机访问,所以需要添加一个admin用户,密码设为admin123。添加用户只能在Rabbitmq启动的状态下进行,因此,需要另打开一个shell来进行操作。

# 创建用户并分配权限
cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
# 创建新用户以及用户名
./rabbitmqctl add_user admin admin123
# 给新用户赋以管理权限
./rabbitmqctl set_user_tags admin administrator
# 给用户赋以其他权限
./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 查看用户和其分配的权限
rabbitmqctl list_users

# 以下操作无须使用
# 删除用户
rabbitmqctl delete_user admin
# 修改用户的密码
rabbitmqctl change_password admin [Newpassword]

访问 [服务器的ip]:15672,并输入设置的admin用户密码进行可视化界面访问。 在这里插入图片描述

三、RabbitMQ简单demo操作使用

引入相关依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

相关配置

spring:
  # RabbitMQ 配置项,对应 RabbitProperties 配置类
  rabbitmq:
    host: 127.0.0.1 # RabbitMQ 服务的地址
    port: 5672 # RabbitMQ 服务的端口
    username: admin # RabbitMQ 服务的账号
    password: admin123 # RabbitMQ 服务的密码

以直连交换机为例 配置类

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 RabbitmqDirectConfig {

    public static final String QUEUE_NAME = "QUEUE_DEMO_DIRECT";

    public static final String EXCHANGE_NAME = "DIRECT_EXCHANGE";

    public static final String ROUTING_KEY = "ROUTING_KEY_01";

    @Bean("demoDirectExchange")
    public Exchange demoDirectExchange(){
        return ExchangeBuilder.directExchange(EXCHANGE_NAME).durable(true).build();
    }

    @Bean("demoDirectQueue")
    public Queue demoDirectQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }

    @Bean
    public Binding bindDirectQueueExchange(@Qualifier("demoDirectQueue") Queue queue, @Qualifier("demoDirectExchange") Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY).noargs();
    }

}

消息监听-消费者

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;


@Component
public class RabbitmqListener {

    private Logger logger = LoggerFactory.getLogger(RabbitmqListener.class);

    @RabbitListener(queues = "QUEUE_DEMO_DIRECT")
    public void ListenerQueue01(Message message) {
        System.out.println("message====" + message);
        logger.info("[onMessage][线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), message);
    }
}

启动SpringBoot项目

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

创建一个测试类用于生产者发送消息

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void DirectExchange() {
        rabbitTemplate.convertAndSend(RabbitmqDirectConfig.EXCHANGE_NAME, RabbitmqDirectConfig.ROUTING_KEY, "mq hello Direct");
        System.out.println("发送消息mq hello Direct成功");
    }
}

结果展示 发送消息成功 在这里插入图片描述 成功接收到消息 在这里插入图片描述 完成!