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 @   一份人间烟火  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示