RabbitMQ

安装Rabbitmq

1.由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang

sudo apt-get install erlang-nox

2.安装rabbitmq

安装前需要配置rabbitmq.list到etc/apt/source.list.d目录下

配置文件:

## Provides modern Erlang/OTP releases
##
## Replace $distribution with the name of the Ubuntu release used.
## On Debian, "deb/ubuntu" should be replaced with "deb/debian"
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main

## Provides RabbitMQ
##
## Replace $distribution with the name of the Ubuntu release used.
## On Debian, "deb/ubuntu" should be replaced with "deb/debian"
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main

更新源

sudo apt-get update

安装

sudo apt-get install rabbitmq -server

查看状态

   systemctl status rabbitmq-server.service 或者 service rabbitmq-server status   

启动服务

   systemctl  start rabbitmq-server.service 或者 service rabbitmq-server start    

停止服务

 systemctl stop rabbitmq-server.service 或者 service rabbitmq-server stop              

重启服务

systemctl  restart rabbitmq-server.service  或 service rabbitmq-server restart

安装插件

进入目录:

cd  /usr/lib/rabbitmq/bin
sudo   ./rabbitmq-plugins enable rabbitmq_management       

重启服务

systemctl  restart rabbitmq-server.service      或 service rabbitmq-server restart

访问:

http://ip:15672 使用guest/guest登录

RabbitMQ用户角色及权限控制

RabbitMQ角色分为以下几种:

角色 描述
none 不能访问 management plugin
management 普通管理员用户可以通过AMQP做的任何事列出自己可以通过AMQP登入的virtual hosts 查看自己的virtual hosts中的queues, exchanges 和 bindings查看和关闭自己的channels 和 connections查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker 策略制定者management可以做的任何事查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring 监控者management可以做的任何事列出所有virtual hosts,包括他们不能登录的virtual hosts查看其他用户的connections和channels查看节点级别的数据如clustering和memory使用情况查看真正的关于所有virtual hosts的全局的统计信息
administrator 管理员policymaker和monitoring可以做的任何事创建和删除virtual hosts查看、创建和删除users查看创建和删除permissions关闭其他用户的connections

创建用户并授权

创建用户

rabbitmqctl add_user   username  password

授予角色

rabbitmqctl set_user_tags  username  角色名称

如果多个角色,用空格隔开

修改密码

rabbitmqctl change_password username  password

删除用户

rabbitmqctl delete_user username

查看用户

rabbitmqctl list_users

IDEA中测试简单的rabbitmq生产者消费者

生产者:

package com.by;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
/**
 * description:
 * author:zcx
 * lenovo
 * 时间:2022.05.31.16.58
 */
public class Publisher {
    public static void main(String[] args) throws IOException, TimeoutException {
        //第一步 创建连接
        ConnectionFactory factory=new ConnectionFactory();
        //第二步设置mq服务器连接信息
        factory.setVirtualHost("erp");//设置虚拟主机,默认是/
        factory.setHost("192.168.12.63");//设置mq服务器地址
        factory.setUsername("admin");//访问虚拟主机的用户名 默认是guest
        factory.setPassword("zcx123");//访问虚拟主机的用户资源
        factory.setPort(5672);//mq服务器端口号
        //获取连接
        Connection conn=factory.newConnection();
        //第二步 在连接上创建信道
        Channel channel=conn.createChannel();
        //声明队列名称
        String queue_name="hello";
        //第三步 通过信道 声明队列
        /**
         * 参数1 queue 队列名称
         * 参数2 durable 声明队列是否是持久化的,false重启mq队列会消失
         * 参数3 exclvusive 是否独占的连接,否则只能同一个连接读取消息
         * 参数4 outoDelete 队列在不使用时删除
         */
        channel.queueDeclare(queue_name,false,false,false,null);
         //第四步 发送消息
        String msg="订单详情";
        /**
         * 参数1 交换器的名称 简单模式下默认为”“ 默认使用交换器 AMQP.default
         * 参数2 路由器 在简单模式下直接指明队列名称
         * 参数4 消息体
         */
        AMQP.BasicProperties prop=new AMQP.BasicProperties("","utf-8",null,1,1,"","","","1001",null,"","1","0010","");
        //prop.builder().appId("0100").userId("1").messageId("1").messageId("100").build();
        channel.basicPublish("",queue_name,prop,msg.getBytes());
        System.out.println("生产者发送消息:"+msg);
        //关闭连接
        conn.close();
    }
}

消费者:

package com.by;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
 * description:
 * author:zcx
 * lenovo
 * 时间:2022.05.31.19.25
 */
public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //第一步 创建连接
        ConnectionFactory factory=new ConnectionFactory();
        //第二步设置mq服务器连接信息
        factory.setVirtualHost("erp");//设置虚拟主机,默认是/
        factory.setHost("192.168.12.63");//设置mq服务器地址
        factory.setUsername("admin");//访问虚拟主机的用户名 默认是guest
        factory.setPassword("zcx123");//访问虚拟主机的用户资源
        factory.setPort(5672);//mq服务器端口号
        //获取连接
        Connection conn=factory.newConnection();
        //第二步 在连接上创建信道
        Channel channel=conn.createChannel();
        //声明队列名称
        String queue_name="hello";
        //第三步 通过信道 声明队列
        channel.queueDeclare(queue_name,false,false,false,null);
        System.out.println("消费者开始消费:");
        DeliverCallback callback=new DeliverCallback(){
            @Override
            public void handle(String s, Delivery delivery) throws IOException{
                System.out.println("s>>>>>>>>>"+s);
               BasicProperties properties= delivery.getProperties();
                System.out.println(properties.getAppId());
                System.out.println(properties.getUserId());
                System.out.println("接收消息:"+new String(delivery.getBody()));
            }
        };
        //从队列中读取消息
        channel.basicConsume(queue_name,true,callback,var->{});
        //关闭连接
        //消费者的连接不能关闭
        //conn.close();
    }
}
posted @ 2022-05-31 21:14  一份人间烟火  阅读(82)  评论(0)    收藏  举报