Docker安装RabbitMQ并简单简单使用

1.Docker安装RabbitMQ

1.1下载RabbitMQ镜像

docker pull rabbitmq

1.2创建并启动RabbitMQ容器

docker run -id --hostname myrabbit --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq

1.3进入容器交互页面

docker exec -it rabbitmq /bin/bash

1.4下载插件

rabbitmq-plugins enable rabbitmq_management

1.5登录

ip+端口号访问
账号密码均为:guest

1.6拓展

# 创建账号和密码
rabbitmqctl add_user 用户名 密码

# 设置用户角色
rabbitmqctl set_user_tags admin administrator

# 为用户添加资源权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

# 添加配置、写、读权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

用户级别:

  • administrator:可以登录控制台、查看所有信息、可以对 rabbitmq 进行管理。
  • monitoring:监控者 登录控制台,查看所有信息。
  • policymaker:策略制定者 登录控制台,指定策略。
  • managment:普通管理员 登录控制台。

注:有可能会出现下面这个问题

访问Docker的rabbitMq容器的Web-UI界面无法查看消息的状态及出现Stats in management UI are disabled on this node

解决办法:

  • 进入RabbitMQ容器
docker exec -it rabbitmq /bin/bash
  • 进入容器后,cd到路径/etc/rabbitmq/conf.d/
cd /etc/rabbitmq/conf.d/
  • 再修改management_agent.disable_metrics_collector
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
  • 退出容器
exit
  • 输入指令
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
  • 重启RabbitMQ
docker restart rabbitmq

2.简单使用

2.1pom.xml文件添加依赖(本环境是jdk1.8的)

<dependencies>
    <!--rabbitmq 依赖客户端-->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.8.0</version>
    </dependency>
    <!--操作文件流的一个依赖-->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
</dependencies>

2.2新建Producer类为生产者

package com.youzi.rabbitmq.one;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author youzi
 * @ClassName Producer
 * @Date 2022/6/30 15:41
 * @Description //TODO 生产者
 */
public class Producer {

    //设置队列名称
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {

        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();

        //2.设置IP
        factory.setHost("ip地址");

        //3.设置用户名密码
        factory.setUsername("用户名");
        factory.setPassword("密码");

        //4.创建连接
        Connection connection = factory.newConnection();

        //5.获取信道
        Channel channel = connection.createChannel();

        /**
         * 参数1.队列名称
         * 参数2.队列里面的消息是否持久化,默认是不持久化
         * 参数3.该队列是否只供一个消费之进行消费,是否进行消息共享,true表示可以多个消费者消费
         * 参数4.是否自动删除,最后一个消费者断开连接以后,该队列是否自动删除,true表示自动删除
         * 参数5.其他参数
         */
        //生成一个队列
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        //消息
        String message = "hello youzi";


        /**
         * 参数1.交换机名称
         * 参数2.路由的key值,队列名称
         * 参数3.其他参数
         * 参数4.消息体
         */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());

        System.out.println("消息发送成功");

        channel.close();
        connection.close();
    }

}

2.3新建Consumer类为消费者

package com.youzi.rabbitmq.one;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author youzi
 * @ClassName Consumer
 * @Date 2022/6/30 16:44
 * @Description //TODO 消费者
 */
public class Consumer {

    //设置队列名称 一定要和生产者的一样才能找到对应的关系
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();

        //2.设置IP
        factory.setHost("IP地址");

        //3.设置用户名密码
        factory.setUsername("用户名");
        factory.setPassword("密码");

        //4.创建连接
        Connection connection = factory.newConnection();

        //5.获取信道
        Channel channel = connection.createChannel();

        //申明回调方法 未成功消费
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println(new String(message.getBody()));
        };

        //申明回调方法 取消消费
        CancelCallback cancelCallback = consumerTag -> {
            System.out.println("消费中断");
        };

        /**
         * 消费者接收消息
         * 参数1.队列名称
         * 参数2.消费成功之后是否要自动应答,true表示自动应答
         * 参数3.消费者未成功消费的回调方法
         * 参数4.消费者取消消费时的回调方法
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }
}

2.4访问RabbitMQ的后台管理页面

评论

暂无

添加新评论