东营网站建设方案,广告设计公司网站源码,手表网站app推荐,北京论坛介绍与安装 1.RabbitMQ1.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#xff0c;目前常见的实现方案就是消息队列#xff08;MessageQueue… 介绍与安装 1.RabbitMQ1.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实现
ActiveMQRabbitMQRocketMQKafka
几种常见MQ的对比
RabbitMQActiveMQRocketMQKafka公司/社区RabbitApache阿里Apache开发语言ErlangJavaJavaScalaJava协议支持AMQPXMPPSMTPSTOMPOpenWire,STOMPREST,XMPP,AMQP自定义协议自定义协议可用性高一般高高单机吞吐量一般差高非常高消息延迟微秒级毫秒级毫秒级毫秒以内消息可靠性高一般高一般
追求可用性Kafka、 RocketMQ 、RabbitMQ 追求可靠性RabbitMQ、RocketMQ 追求吞吐能力RocketMQ、Kafka 追求消息低延迟RabbitMQ、Kafka
1.1.安装
同样基于Docker来安装RabbitMQ使用下面的命令即可
docker run \-e RABBITMQ_DEFAULT_USERroot \-e RABBITMQ_DEFAULT_PASSroot\-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network hmall \-d \rabbitmq:2.8-management可以看到在安装命令中有两个映射的端口
15672RabbitMQ提供的管理控制台的端口5672RabbitMQ的消息发送处理接口
安装完成后访问 http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录默认的用户名和密码在配置文件中已经指定了。 登录后即可看到管理控制台总览页面
RabbitMQ对应的架构如图
其中包含几个概念
publisher生产者也就是发送消息的一方consumer消费者也就是消费消息的一方queue队列存储消息。生产者投递的消息会暂存在消息队列中等待消费者处理exchange交换机负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。virtual host虚拟主机起到数据隔离的作用。每个虚拟主机相互独立有各自的exchange、queue
上述这些东西都可以在RabbitMQ的管理控制台来管理
1.2.收发消息
1.2.1.交换机
打开Exchanges选项卡可以看到已经存在很多交换机
点击任意交换机即可进入交换机详情页面。仍然会利用控制台中的publish message 发送一条消息 这里是由控制台模拟了生产者发送的消息。由于没有消费者存在最终消息丢失了这样说明交换机没有存储消息的能力。
1.2.2.队列
打开Queues选项卡新建一个队列
命名为hello.queue1
再以相同的方式创建一个队列密码为hello.queue2最终队列列表如下 此时我们再次向amq.fanout交换机发送一条消息。会发现消息依然没有到达队列 怎么回事呢 发送到交换机的消息只会路由到与其绑定的队列因此仅仅创建队列是不够的我们还需要将其与交换机绑定。
1.2.3.绑定关系
点击Exchanges选项卡点击amq.fanout交换机进入交换机详情页然后点击Bindings菜单在表单中填写要绑定的队列名称
相同的方式将hello.queue2也绑定到改交换机。 最终绑定结果如下
1.2.4.发送消息
再次回到exchange页面找到刚刚绑定的amq.fanout点击进入详情页再次发送一条消息
回到Queues页面可以发现hello.queue中已经有一条消息了
点击队列名称进入详情页查看队列详情这次我们点击get message
可以看到消息到达队列了 这个时候如果有消费者监听了MQ的hello.queue1或hello.queue2队列自然就能接收到消息了。
1.2.数据隔离
1.2.1.用户管理
点击Admin选项卡首先会看到RabbitMQ控制台的用户管理界面
这里的用户都是RabbitMQ的管理或运维人员。目前只有安装RabbitMQ时添加的itheima这个用户。仔细观察用户表格中的字段如下
Nameitheima也就是用户名Tagsadministrator说明itheima用户是超级管理员拥有所有权限Can access virtual host /可以访问的virtual host这里的/是默认的virtual host
对于小型企业而言出于成本考虑我们通常只会搭建一套MQ集群公司内的多个不同项目同时使用。这个时候为了避免互相干扰 我们会利用virtual host的隔离特性将不同项目隔离。一般会做两件事情
给每个项目创建独立的运维账号将管理权限分离。给每个项目创建不同的virtual host将每个项目的数据隔离。
比如给商城创建一个新的用户命名为hmall
会发现此时hmall用户没有任何virtual host的访问权限 别急接下来我们就来授权。
1.2.3.virtual host
我们先退出登录
切换到刚刚创建的hmall用户登录然后点击Virtual Hosts菜单进入virtual host管理页
可以看到目前只有一个默认的virtual host名字为 /。 我们可以给商城项目创建一个单独的virtual host而不是使用默认的/。
创建完成后如图
由于我们是登录hmall账户后创建的virtual host因此回到users菜单你会发现当前用户已经具备了对/hmall这个virtual host的访问权限了
此时点击页面右上角的virtual host下拉菜单切换virtual host为 /hmall
然后再次查看queues选项卡会发现之前的队列已经看不到了
这就是基于virtual host 的隔离效果。