RabbitMQ-理解消息通信-虚拟主机和隔离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ-理解消息通信-虚拟主机和隔离相关的知识,希望对你有一定的参考价值。

每个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(vhost)每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑定等等

更重要的是,他拥有自己的权限机制这使得你能够安全地使用一个RabbitMQ服务器来服务众多的应用程序

vhost就像是虚拟机之与物理服务器一样:他们在各个实例间提供逻辑上的分离,允许你为不同程序安全保密地运行数据,它既能将同一个Rabbit的众多客户区分开来,又可以避免队列和交换器命名冲突

vhost是AMQP概念的基础,你必须在连接时进行指定

RabbitMQ包含了一个开箱即用的默认vhost:”/“,如果你不需要多个vhost,那么就使用默认的吧,使用缺省的guest用户名和密码guest就可以访问默认的vhost

当你在RabbitMQ集群上创建vhost,整个集群上都会创建该vhost,vhost不仅消除了为基础架构中的每一层运行一个RabbitMQ服务器的需要,同样也避免了为每一层创建不同集群

Rabbitmq~对Vhost的配置

 rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用,下面分别再说一下它们的知识。

VHost

vhost去做第一层的区分,虚拟主机,工作组等,它默认是/

添加自己项目的Vhost

技术分享图片

添加成功后,在列表里可以显示

技术分享图片

添加建立一个用户,设置密码

 技术分享图片

把用户添加到对应的VHost组里,注意连接时也要使用VHost参数,如果没有特别设置,可以不指定它,默认就是/

技术分享图片

channel

创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令。一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是十分昂贵的,如果一个客户端每一个线程都需要与Broker交互,如果每一个线程都建立一个TCP连接,暂且不考虑TCP连接是否浪费,就算操作系统也无法承受每秒建立如此多的TCP连接

Exchange

有多种类型,我们在发布和订阅时,要指定这些类型,一般我们会使用性能更好的direc,或者更灵活的,支持通配符的topic

技术分享图片

在客户端连接时,需要指定一下VHost

            exchangeName = options.ExchangeName;
            mqServerHost = options.MqServerHost;
            userName = options.UserName;
            password = options.Password;            var factory = new ConnectionFactory()
            {
                Uri = new Uri(mqServerHost)
            };
            factory.VirtualHost = options.VirtualHost;

好了,本讲主要介绍了如何去配置VHost和如何去连接它!

本文参考https://blog.csdn.net/wangnan9279/article/details/71425683

https://www.cnblogs.com/lori/p/7852534.html

以上是关于RabbitMQ-理解消息通信-虚拟主机和隔离的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ:理解消息通信RabbitMQ

RabbitMQ学习笔记2-理解消息通信

RabbitMQ实战:理解消息通信

RabbitMQ实战:消息通信模式和最佳实践

初识 RabbitMQ

RabbitMQ-安装及五种消息模型