RabbitMQ常用操作命令和入门案例(一对一的简单模式)


一、RabbitMQ常用操作命令

常见命令列表

# 前台启动Erlang VM和RabbitMQrabbitmq-server
# 后台启动rabbitmq-server -detached
# 停止RabbitMQ和Erlang VMrabbitmqctl stop# 查看所有队列rabbitmqctl list_queues
# 查看所有虚拟主机rabbitmqctl list_vhosts
# 在Erlang VM运行的情况下启动RabbitMQ应用rabbitmqctl start_apprabbitmqctl stop_app
# 查看节点状态rabbitmqctl status
# 查看所有可用的插件rabbitmq-plugins list
# 启用插件rabbitmq-plugins enable <plugin-name>
# 停用插件rabbitmq-plugins disable <plugin-name># 添加用户rabbitmqctl add_user username password
# 列出所有用户:rabbitmqctl list_users
# 删除用户:rabbitmqctl delete_user username
# 清除用户权限:rabbitmqctl clear_permissions -p vhostpath username
# 列出用户权限:rabbitmqctl list_user_permissions username
# 修改密码:rabbitmqctl change_password username newpassword
# 设置用户权限:rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"# 创建虚拟主机:rabbitmqctl add_vhost vhostpath
# 列出所以虚拟主机:rabbitmqctl list_vhosts
# 列出虚拟主机上的所有权限:rabbitmqctl list_permissions -p vhostpath
# 删除虚拟主机:rabbitmqctl delete_vhost vhost vhostpath
# 移除所有数据,要在 rabbitmqctl stop_app 之后使用:rabbitmqctl reset

操作案例

前台启动Erlang VM和RabbitMQ
停止RabbitMQ和Erlang VM

多出一个守护进程:epmd负责端口通信和内存分配

查看所有队列/查看rabbitmqctl 帮助命令
查看 “查看所有队列” 命令 的帮助命令

查看所有虚拟主机
查看所有虚拟主机(使用参数–formatter pretty_table)

查看节点状态

 [root@RabbitMQ ~]# rabbitmqctl statusStatus of node rabbit@RabbitMQ ...RuntimeOS PID: 7894OS: LinuxUptime (seconds): 1017RabbitMQ version: 3.8.5Node name: rabbit@RabbitMQErlang configuration: Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [hipe]Erlang processes: 439 used, 1048576 limitScheduler run queue: 1Cluster heartbeat timeout (net_ticktime): 60PluginsEnabled plugin file: /etc/rabbitmq/enabled_pluginsEnabled plugins:* rabbitmq_management* amqp_client* rabbitmq_web_dispatch* cowboy* cowlib* rabbitmq_management_agentData directoryNode data directory: /var/lib/rabbitmq/mnesia/rabbit@RabbitMQRaft data directory: /var/lib/rabbitmq/mnesia/rabbit@RabbitMQ/quorum/rabbit@RabbitMQConfig filesLog file(s)* /var/log/rabbitmq/rabbit@RabbitMQ.log* /var/log/rabbitmq/rabbit@RabbitMQ_upgrade.logAlarms(none)MemoryCalculation strategy: rssMemory high watermark setting: 0.4 of available memory, computed to: 0.4079 gbcode: 0.0277 gb (31.81 %)other_proc: 0.0264 gb (30.33 %)other_system: 0.0122 gb (14.07 %)allocated_unused: 0.0115 gb (13.24 %)other_ets: 0.0032 gb (3.67 %)reserved_unallocated: 0.0026 gb (2.99 %)plugins: 0.0015 gb (1.71 %)atom: 0.0014 gb (1.63 %)mgmt_db: 0.0002 gb (0.2 %)binary: 0.0001 gb (0.14 %)mnesia: 0.0001 gb (0.09 %)metrics: 0.0001 gb (0.07 %)msg_index: 0.0 gb (0.03 %)quorum_ets: 0.0 gb (0.02 %)connection_other: 0.0 gb (0.0 %)connection_channels: 0.0 gb (0.0 %)connection_readers: 0.0 gb (0.0 %)connection_writers: 0.0 gb (0.0 %)queue_procs: 0.0 gb (0.0 %)queue_slave_procs: 0.0 gb (0.0 %)quorum_queue_procs: 0.0 gb (0.0 %)File DescriptorsTotal: 2, limit: 927Sockets: 0, limit: 832Free Disk SpaceLow free disk space watermark: 0.05 gbFree disk space: 15.0882 gbTotalsConnection count: 0Queue count: 0Virtual host count: 1ListenersInterface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communicationInterface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0Interface: [::], port: 15672, protocol: http, purpose: HTTP API


插件操作

用户操作

权限操作

二、RabbitMQ工作流程概述

1、生产者发送消息的流程

 1. 生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel)2. 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等3. 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等4. 生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来5. 生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换器等信息6. 相应的交换器根据接收到的 routingKey 查找相匹配的队列。7. 如果找到,则将从生产者发送过来的消息存入相应的队列中。8. 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者9. 关闭信道。10. 关闭连接。

2、消费者接收消息的过程

 1. 消费者连接到RabbitMQ Broker ,建立一个连接(Connection ) ,开启一个信道(Channel) 。2. 消费者向RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数, 以及做一些准备工作3. 等待RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息。4. 消费者确认( ack) 接收到的消息。5. RabbitMQ 从队列中删除相应己经被确认的消息。6. 关闭信道。7. 关闭连接。

3、案例(一对一的简单模式)

生产者直接发送消息给RabbitMQ,另一端消费。未定义和指定Exchange的情况下,使用的是AMQP default这个内置的Exchange。

3.1 编写pom.xml,引入rabbitmq依赖

 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dabing</groupId><artifactId>RabbitMQTest</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version></dependency></dependencies></project>

3.2 编写消费者端TestProducter .java,向队列发送消息”hello rabbitmq“

 public class TestProducter {public static void main(String[] args) throws IOException, TimeoutException {// 1. 获取连接工厂ConnectionFactory factory = new ConnectionFactory();// 通过属性设置(也可以通过uri设置)// 2. 设置主机名 hostnamefactory.setHost("192.168.80.15");// 3. 设置虚拟主机名称  /在url中的转义字符 %2ffactory.setVirtualHost("/");// 4. 设置用户名和密码factory.setUsername("root");// 密码factory.setPassword("123456");// amqp的端口号factory.setPort(5672);// 5. 建立TCP连接Connection connection = factory.newConnection();// 6. 获取通道Channel channel = connection.createChannel();// 7. 声明消息队列// 参数一:消息队列名称// 参数二:是否是持久化的(重启后,消息队列是否存在)// 参数三:是否是排他的(共享)// 参数四:是否是自动删除的(没有客户端订阅监听,系统自动删除)// 参数五:消息队列的属性信息。使用默认值;channel.queueDeclare("queue.dabing", false, false, true, null);// 8. 声明交换器// 参数一:交换器的名称// 参数二:交换器的类型// 参数三:交换器是否是持久化的// 参数四:交换器是否是自动删除的// 参数五:交换器的属性map集合channel.exchangeDeclare("ex.dabing", BuiltinExchangeType.DIRECT, false, false, null);// 9. 将交换器和消息队列绑定,并指定路由键//参数三:路由keychannel.queueBind("queue.dabing", "ex.dabing", "testmq");// 10. 发送消息// 参数一:交换器的名字// 参数二:该消息的路由键// 参数三:该消息的属性BasicProperties对象// 参数四:消息的字节数组channel.basicPublish("ex.dabing", "testmq", null, "hello rabbitmq".getBytes());// 11. 关闭通道channel.close();// 关闭连接connection.close();}}

运行后,web端查看

交换,路由key和队列的对应关系

3.3 编写TestGetConsumer.java(拉取消息)

public class TestGetConsumer {public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, URISyntaxException, IOException, TimeoutException {// 1. 获取连接工厂ConnectionFactory factory = new ConnectionFactory();// 2. 通过uri设置(也可以通过属性设置)// 指定协议: amqp://// 指定用户名  root// 指定密码   123456// 指定host   192.168.80.15// 指定端口号  5672// 指定虚拟主机  %2f   表示:斜杠factory.setUri("amqp://root:123456@192.168.80.15:5672/%2f");// 3. 建立TCP连接final Connection connection = factory.newConnection();System.out.println(connection.getClass());// 4. 获取通道final Channel channel = connection.createChannel();// 5. 拉消息模式// 参数一:指定从哪个消费者消费消息// 参数二:指定是否自动确认消息  true表示自动确认final GetResponse getResponse = channel.basicGet("queue.dabing", true);// 6. 获取消息体  hello world 1final byte[] body = getResponse.getBody();System.out.println("body:"+new String(body));channel.close();connection.close();}
}

运行程序 TestGetConsumer.java

3.4 编写TestPushConsumeConsumer.java(推消息)

public class TestPushConsumeConsumer {public static void main(String[] args) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setUri("amqp://root:123456@192.168.80.15:5672/%2f");final Connection connection = factory.newConnection();final Channel channel = connection.createChannel();// 确保MQ中有该队列,如果没有则创建channel.queueDeclare("queue.dabing", false, false, true, null);DeliverCallback callback = new DeliverCallback() {@Overridepublic void handle(String consumerTag, Delivery message) throws IOException {System.out.println(new String(message.getBody()));}};// 监听消息,一旦有消息推送过来,就调用第一个lambda表达式channel.basicConsume("queue.dabing", (consumerTag, message) -> {System.out.println(new String(message.getBody()));}, (consumerTag) -> {});//channel.close();//connection.close();}}

运行消费者,等待生产者生产消息(控制台无消息)

运行两次生产者,消费者接受到消息

案例地址:RabbitMQTest 案例demo下载地址

提取码:5vml

RabbitMQ常用操作命令和入门案例(一对一的简单模式)相关推荐

  1. matlab快速入门案例及常用技巧 | 《matlab数学建模方法与实践(第三版)》学习笔记

    目录 快速入门案例: 解决流程: 具体实现: 一.获取数据 二.数据探索和建模 三.分享结果 常用技巧 一.常用标点功能 二.常用操作指令 三.指令编辑操作键 四.matlab数据类型 五.开发模式 ...

  2. RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器

    文章目录 1. 入门案例 2. 完成官方Demo中的hello world案例 2.1 创建1个工程,2个模块 2.1.1 父工程的依赖,子工程不需要导入额外的依赖 2.1.2 配置子工程的配置文件( ...

  3. RabbitMQ入门篇、介绍RabbitMQ常用的五种模式

    RabbitMQ 认识RabbitMQ AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为 ...

  4. ActiveMQ-01-MQ概述,安装,入门案例

    文章目录 01.MQ概述 MQ的产品种类和对比 MQ的产生背景 MQ的主要作用 MQ的定义 MQ的特点 02.RPC架构 什么是RPC架构? 常见的RPC架构 03.ActiveMQ安装 04.入门案 ...

  5. linux查看rabbitmq运行状态,RabbitMQ常用命令

    RabbitMQ常用命令 rabbitmqctl命令 http://www.rabbitmq.com/man/rabbitmqctl.1.man.html# 1). 服务器启动与关闭 启动: rabb ...

  6. python 筛选提取连续多行_没有比这更简单的Python入门案例,用python打印你的宠物小精灵...

    现在学习Python的人越来越多,但你会以怎样的方式开始编写你的第一个Python代码呢? 下面我教你一个简单的入门案例,很适合最开始的Python学习哦! 即将用到的Python基础语法是:prin ...

  7. 入门案例中使用的组件介绍

    DispatcherServlet:前端控制器 用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispat ...

  8. 消息队列入门案例-环境搭建

    我们就来编写一个RabbitMQ的入门案例,首先第一步呢,先要去创建一个Project,那么至于Project的创建方式呢,我们都可以,比如用Spring官网创建的方式,创建项目也可以,你也可以在ID ...

  9. 流式计算storm核心组件介绍以及入门案例---跟着就能在本地跑起来的storm项目

    关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参 ...

最新文章

  1. python中数据分析的流程为-利用python进行数据分析——histogram
  2. eclipse创建springboot项目_Spring Initializer+IntelliJ IDEA创建Spring Boot项目(图文)
  3. 开多个bitset和bitset的基本使用
  4. apollo 配置中心_.NET Core 下使用 Apollo 配置中心
  5. 乘势而起,走进2019年风口“边缘计算”
  6. run as date怎么用_熟词僻义 | date是一种什么水果?
  7. 折线 没有显示_动画折线图,你还可以试试这个图表
  8. 第28件事 挖掘用户真实需求的6大撒手锏
  9. Java多线程学习总结(4)——ThreadPoolExecutor 线程池的拒绝策略学习总结
  10. 对HGE游戏引擎的一次封装
  11. P2P 漏洞曝光,数以百万计的物联网设备被入侵!
  12. 前端面试instanceof_【面试准备】每日前端面试题 45 (前端校招字节跳动面试4)...
  13. 基于SSM的猫头鹰物流网站
  14. 黑马python就业班_2017年最新黑马Python2017年就业班不加密视频教程
  15. Android Auto (AA)手机软件安装总结
  16. IDEA提高运行速度
  17. Django 基础(3)-django_filters模块
  18. 2017 robotart x86_RobotArt:机器人离线编程仿真软件领航者
  19. 下载频道2013年超人气精华资源汇总---全都是免积分下载
  20. C#时间/日期格式大全

热门文章

  1. ffmpeg合并音频(转)
  2. 怎么样让用户认为产品更有价值?让他们DIY吧!
  3. Android Native C Log
  4. Matlab定义符号函数(ZZ)
  5. Practice Lab 7:路由再分发
  6. WPF 可触摸移动的ScrollViewer控件
  7. 学习笔记———Python内置函数dir()
  8. Java调用Lua脚本(热载实现)
  9. 智能城市技术能够更好地改善日常生活
  10. JAVA 通过串口发送命令