当前位置: 首页 > article >正文

RabbitMQ-1.介绍与安装

介绍与安装

  • 1.RabbitMQ
    • 1.0.技术选型
    • 1.1.安装
    • 1.2.收发消息
      • 1.2.1.交换机
      • 1.2.2.队列
      • 1.2.3.绑定关系
      • 1.2.4.发送消息
    • 1.2.数据隔离
      • 1.2.1.用户管理
      • 1.2.3.virtual host

1.RabbitMQ

1.0.技术选型

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
目比较常见的MQ实现:

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka

几种常见MQ的对比:

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka

1.1.安装

同样基于Docker来安装RabbitMQ,使用下面的命令即可:

docker run \
 -e RABBITMQ_DEFAULT_USER=root \
 -e RABBITMQ_DEFAULT_PASS=root\
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network hmall \
 -d \
 rabbitmq:2.8-management

可以看到在安装命令中有两个映射的端口:

  • 15672:RabbitMQ提供的管理控制台的端口
  • 5672:RabbitMQ的消息发送处理接口

安装完成后,访问 http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。
登录后即可看到管理控制台总览页面:
image.png

RabbitMQ对应的架构如图:
image.png

其中包含几个概念:

  • publisher:生产者,也就是发送消息的一方
  • consumer:消费者,也就是消费消息的一方
  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

上述这些东西都可以在RabbitMQ的管理控制台来管理

1.2.收发消息

1.2.1.交换机

打开Exchanges选项卡,可以看到已经存在很多交换机:
image.png

点击任意交换机,即可进入交换机详情页面。仍然会利用控制台中的publish message 发送一条消息:
image.png
image.png
这里是由控制台模拟了生产者发送的消息。由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。

1.2.2.队列

打开Queues选项卡,新建一个队列:
image.png

命名为hello.queue1
image.png

再以相同的方式,创建一个队列,密码为hello.queue2,最终队列列表如下:
image.png
此时,我们再次向amq.fanout交换机发送一条消息。会发现消息依然没有到达队列!!
怎么回事呢?
发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。

1.2.3.绑定关系

点击Exchanges选项卡,点击amq.fanout交换机,进入交换机详情页,然后点击Bindings菜单,在表单中填写要绑定的队列名称:
image.png

相同的方式,将hello.queue2也绑定到改交换机。
最终,绑定结果如下:
image.png

1.2.4.发送消息

再次回到exchange页面,找到刚刚绑定的amq.fanout,点击进入详情页,再次发送一条消息:
image.png

回到Queues页面,可以发现hello.queue中已经有一条消息了:
image.png

点击队列名称,进入详情页,查看队列详情,这次我们点击get message:
image.png

可以看到消息到达队列了:
image.png
这个时候如果有消费者监听了MQ的hello.queue1hello.queue2队列,自然就能接收到消息了。

1.2.数据隔离

1.2.1.用户管理

点击Admin选项卡,首先会看到RabbitMQ控制台的用户管理界面:
image.png

这里的用户都是RabbitMQ的管理或运维人员。目前只有安装RabbitMQ时添加的itheima这个用户。仔细观察用户表格中的字段,如下:

  • Nameitheima,也就是用户名
  • Tagsadministrator,说明itheima用户是超级管理员,拥有所有权限
  • Can access virtual host/,可以访问的virtual host,这里的/是默认的virtual host

对于小型企业而言,出于成本考虑,我们通常只会搭建一套MQ集群,公司内的多个不同项目同时使用。这个时候为了避免互相干扰, 我们会利用virtual host的隔离特性,将不同项目隔离。一般会做两件事情:

  • 给每个项目创建独立的运维账号,将管理权限分离。
  • 给每个项目创建不同的virtual host,将每个项目的数据隔离。

比如,给商城创建一个新的用户,命名为hmall
image.png

会发现此时hmall用户没有任何virtual host的访问权限:
image.png
别急,接下来我们就来授权。

1.2.3.virtual host

我们先退出登录:
image.png

切换到刚刚创建的hmall用户登录,然后点击Virtual Hosts菜单,进入virtual host管理页:
image.png

可以看到目前只有一个默认的virtual host,名字为 /
我们可以给商城项目创建一个单独的virtual host,而不是使用默认的/
image.png

创建完成后如图:
image.png

由于我们是登录hmall账户后创建的virtual host,因此回到users菜单,你会发现当前用户已经具备了对/hmall这个virtual host的访问权限了:
image.png

此时,点击页面右上角的virtual host下拉菜单,切换virtual host/hmall
image.png

然后再次查看queues选项卡,会发现之前的队列已经看不到了:
image.png

这就是基于virtual host 的隔离效果。


http://www.kler.cn/a/233996.html

相关文章:

  • WEB攻防-通用漏洞SQL注入sqlmapOracleMongodbDB2等
  • Mysql数据库里的SSH连接
  • 优化时钟网络之时钟抖动
  • 【设计模式】行为型模式(二):策略模式、命令模式
  • 详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
  • Axure网络短剧APP端原型图,竖屏微剧视频模版40页
  • django中实现观察者模式
  • Python面试题7-12
  • Linux无交互自动安装miniconda3
  • 004集—二调数据库标注分子分母模式及统计净面积——arcgis
  • MybatisPlus Wrapper构造器(查询篇)
  • 【Java面试】数据类型常见面试题
  • elasticsearch下载及可视化工具下载使用
  • 二十、K8S-1-权限管理RBAC详解
  • MacOS 查AirPods 电量技巧:可实现低电量提醒、自动弹窗
  • Open CASCADE学习|环形弹簧建模
  • 蓝桥杯基础知识7 vector
  • 【开源】JAVA+Vue.js实现计算机机房作业管理系统
  • 【MySQL】字符串函数的学习
  • Python自动化办公实战案例分享
  • 学习Android的第九天
  • 【Zookeeper】what is Zookeeper?
  • 20240210使用剪映识别字幕的时候的GPU占比RX580-RTX4090
  • 2024刘谦春晚第二个扑克牌魔术
  • 算法学习——LeetCode力扣栈与队列篇2
  • 【JavaScript】对象的属性和方法