阅读 82

RabbitMQ(1): 初始 RabbitMQ

前言

因为系统采用的是 centos7 版本,因此需要下载对应的 erlang 和 rabbitmq 包。

image-20211012165632826

下载的官网地址为:

www.erlang-solutions.com/downloads/

www.rabbitmq.com/#getstarted

但是下载很慢,因此,也可以从大鱼、 的百度网盘中获取。

pan.baidu.com/s/1GPrqI4PP…

验证码:5sgj

一、安装教程

1.1 安装依赖

yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel复制代码

image-20211012165457088

1.2 安装 erlang

[root@localhost package]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm 
复制代码

image-20211012165748400

  • 查看 erlang 是否安装成

    [root@localhost rabbitmq]# erl -v
    Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
    
    Eshell V10.4.4  (abort with ^G)复制代码

1.3 安装 Rabbitmq

yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm复制代码
  • 在目标目录下 /opt/software 下创建 rabbitmq 目录,将默认路径下的配置文件复制到我们创建的目录下。

[root@localhost software]# cd rabbitmq/
[root@localhost rabbitmq]# ls
[root@localhost rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example  /opt/software/rabbitmq/
[root@localhost rabbitmq]# ls
rabbitmq.config.example
[root@localhost rabbitmq]# mv rabbitmq.config.example rabbitmq.config
[root@localhost rabbitmq]# 
复制代码
  • 修改配置文件,删除 guest 用户。

    image-20211012170558857

1.4 启动插件管理

默认情况下,rabbitmq 是没有web 的客户端插件的,通过下面命令可以安装。

rabbitmq-plugins enable rabbitmq_management复制代码

image-20211012171240449

  • 启动、重启、终止、状态服务。

    systemctl start rabbitmq-server # 启动rabbitmq服务
    systemctl restart rabbitmq-server # 重启服务
    systemctl stop rabbitmq-server  # 停止服务
    systemctl status rabbitmq-server  # 查看服务状态复制代码

    出现 active 即表示启动成功。

1.5 授权和账号

  • 添加用户和权限

    [root@localhost rabbitmq]# rabbitmqctl add_user admin 111111                        # 添加用户
    Adding user "admin" ...
    [root@localhost rabbitmq]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"    # 为用户添加资源权限
    Setting permissions for user "admin" in vhost "/" ...
    [root@localhost rabbitmq]# rabbitmqctl set_user_tags admin administrator            # 设置用户分配操作权限 
    Setting tags for user "admin" to [administrator] ...复制代码

用户级别:

  • 1、administrator 可以登录控制台、查看所有信息、可以对rabbitmq进行管理

  • 2、monitoring 监控者 登录控制台,查看所有信息

  • 3、policymaker 策略制定者 登录控制台,指定策略

  • 4、managment 普通管理员 登录控制台

完成这步骤后,访问 ip+ 15672 我们可以用刚才创建的用户登录。

image-20211012171833667

1.6 小结

1.6.1 相关端口
5672:RabbitMQ的通讯端口
25672:RabbitMQ的节点间的CLI通讯端口是
15672:RabbitMQ HTTP_API的端口,管理员用户才能访问,用于管理RabbitMQ,需要启动Management插件。
1883,8883:MQTT插件启动时的端口。
61613、61614:STOMP客户端插件启用的时候的端口。
15674、15675:基于webscoket的STOMP端口和MOTT端口复制代码
1.6.2 rabbitmq 用户操作命令
rabbitmqctl add_user 账号 密码
rabbitmqctl set_user_tags 账号 administrator
rabbitmqctl change_password Username Newpassword 修改密码
rabbitmqctl delete_user Username 删除用户
rabbitmqctl list_users 查看用户清单
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" 为用户设置administrator角色
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"复制代码

二、入门案例-简单模式

在这小节中,我将通过一个例子来入门 RabbitMQ,理解 点对点模式下的 RabbitMQ 是如何工作的。

2.1 构建 Maven 工程

image-20211012173344903

2.2 导入 rabbitMQ 的 maven 依赖

1、Java 原生依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>复制代码

2、spring 依赖

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-amqp</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>复制代码

3、springboot 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>复制代码

以上三种根据项目自己选择就行,我们这边导入 原生依赖。

2.3 编写生产者

public class ProducerTest {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1、创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2、设置连接属性
        connectionFactory.setHost("192.168.81.102");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("111111");

        //3、从连接工厂中获取连接
        Connection connection = connectionFactory.newConnection("producer");
        //4、从连接中获取通道 channel
        Channel channel = connection.createChannel();
        //5、申明 queue 存储消息
        /**
         * 如果队列不存在,则会创建,不允许相同topic 存在
         * @params1: queue 队列的名称
         * @params2: durable 队列是否持久化
         * @params3: exclusive 是否排他,即是否私有的,如果为true,会对当前队列加锁,
         * @params4: autoDelete 是否自动删除
         */
        channel.queueDeclare("queue1", false, false, false, null);

        // 6、发送消息
        for (int i = 1; i <=10; i++) {
            // @params1: 交换机exchange
            // @params2: 队列名称/routing
            // @params3: 属性配置
            // @params4: 发送消息的内容
            channel.basicPublish("","queue1",null,("潇雷挺帅,说第"+i+"遍。").getBytes());
        }

        // 7、关闭连接
        channel.close();
    }
}复制代码

点击执行后,可以去 web 控制台查看这个队列的信息。

image-20211012175203993

2.4 编写消费者

public class ConsumerTest {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1、创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2、设置连接属性
        connectionFactory.setHost("192.168.81.102");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("111111");

        //3、从连接工厂中获取连接
        Connection connection = connectionFactory.newConnection("consumer");
        //4、从连接中获取通道 channel
        Channel channel = connection.createChannel();

        DeliverCallback deliverCallback =(String a, Delivery b)->{
            String message = new String(b.getBody());
            System.out.println(message);
        };
        CancelCallback cancelCallback =(String a)->{
            System.out.println("消息消费被中断");
        };
        /**
         * 消费者消费消息
         * @params1: 消费哪个队列
         * @params2:消费成功之后是否要自动应答 true代表自动应答 ,flase代表手动应答。
         * @params3: 消费者消费成功的回调
         * @params4: 消费者消费失败的回调
         */
        channel.basicConsume("queue1",true,deliverCallback,cancelCallback);
    }
}复制代码

消费记录:

潇雷挺帅,说第1遍。
潇雷挺帅,说第2遍。
潇雷挺帅,说第3遍。
潇雷挺帅,说第4遍。
潇雷挺帅,说第5遍。
潇雷挺帅,说第6遍。
潇雷挺帅,说第7遍。
潇雷挺帅,说第8遍。
潇雷挺帅,说第9遍。
潇雷挺帅,说第10遍。复制代码

2.5 小结

入门案例实现了。

  • 生产者大致步骤:

    • 获取连接

    • 创建通道

    • 创建队列声明

    • 发送消息

    • 关闭队列

  • 消费者大致步骤

    • 获取连接

    • 获取通道

    • 监听队列

    • 消费消息


作者:潇雷
链接:https://juejin.cn/post/7021021600245874725


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐