RabbitMQ虚拟主机作用以及配置 The RabbitMQ virtual host

本文详细介绍了RabbitMQ中的虚拟主机概念及其工作原理。解释了虚拟主机如何作为命名空间来隔离不同应用间的资源,包括交换机、队列和绑定等。并通过实例演示了如何使用rabbitmqctl工具创建虚拟主机及分配权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.163.com/sky20081816@126/blog/static/16476102320107173226920/


The RabbitMQ virtual host


童鞋们在看python写的rabbitmq扩展的时候应该注意到我们的Connection类的构造函数(Connection是连接rabbitmq的一个类)


   def __init__(self,
        host='localhost',
        userid='guest',
        password='guest',
        login_method='AMQPLAIN',
        login_response=None,
        virtual_host='/',
        locale='en_US',
        client_properties=None,
        ssl=False,
        insist=False,
        connect_timeout=None,
        **kwargs): 

  这里面有个参数叫virtual_host,系统默认是'/', 类似于root。
 
 question 1: what is virtual_host   
                2:How does it work


一. what is it

    There are four building blocks you really care about in AMQP: virtual hosts, exchanges, queues and bindings. A virtual host holds a bundle of exchanges, queues and bindings. Why would you want multiple virtual hosts? Easy. A username in RabbitMQ grants you access to a virtual host…in its entirety. So the only way to keep group A from accessing group B’s exchanges/queues/bindings/etc. is to create a virtual host for A and one for B. Every RabbitMQ server has a default virtual host named “/”. If that’s all you need, you’re ready to roll.

    virtualHost is used as a namespace for AMQP resources (default is \"/\"), so different applications could use multiple virtual hosts on the same AMQP server

virtual host只是起到一个命名空间的作用,所以可以多个user共同使用一个virtual host,文章开头写的vritual_host = '/',这个是系统默认的,就是说当我们创建一个到rabbitmq的connection时候,它的命名空间是'/',需要注意的是不同的命名空间之间的资源是不能访问的,比如 exchang,queue ,bingding等

二.How does it work

     既然vitrual host 只是一个命名空间,那么我们就可以自己创建一个喽,怎么去干呢?这里我们需要用到工具 :rabbitmqctl,安装rabbitMQ的时候已经安装好了。这真是一个强大的工具阿。输入 ./rabbitmqctl,我们可以看到
   RabbitMQ虚拟主机作用以及配置 - 毅 - 读书百遍,其意自现

     首先我们可以建立一个测试用户(如果你想用系统默认的guest也可以)
      rabbitmqctl  add_user test 123456 ,这样我们就新建了一个可以连到rabbitmq的用户,用户名时test,密码是123456
      我们可以用 rabbitmqctl list_users 看看有多少个用户了,可以看到有guest和test了吧

      然后 我们通过 rabbitmqctl add_vhosts命令新建一个virtual host :   rabbitmqctl add_vhosts test_host
        我们通过 rabbitmqctl list_vhosts命令看看现在系统有几个vhost了。可以看到有两个,一个是系统默认的 '/', 还有一个就         是我们新建的 test_host。 
  
     但是到这里是不够的,我们只是声明了一个vhost,我们还要给它分配访问权限。
     rabbitmqctl set_permissions -p test_host  test "test-*" ".*" ".*",如此用户名为test的用户就可以访问vitrual host为test_host的资源了,并且具备读写的权限。

    下面是我自己写的一个demo,分为conmuser 和 producer

   
conmuser
       
 #author yi
 #time 2010-08-17 15:30
import sys
import amqplib.client_0_8 as amqp

conn = amqp.Connection(host='localhost',userid='test',password='123456',ssl=False,virtual_host='test_host')
ch = conn.channel()
ch.access_request('/data',active=True,read=True)

ch.queue_declare(queue='x',durable=False,auto_delete=False,exclusive=False)
ch.exchange_declare('y','fanout',durable=False,auto_delete=False)
ch.queue_bind(queue='x',exchange='y',routing_key='love')

def need_callback(msg):
    print 'Hello,your message1 is',msg.body
   
ch.basic_consume('x',consumer_tag='xiaorao',callback=need_callback,no_ack=True)

while ch.callbacks:
       ch.wait()
ch.close()
conn.close()

producer:

 #author yi
 #time 2010-08-17 15:37

import sys
import amqplib.client_0_8 as amqp
                       
conn = amqp.Connection(host='localhost',userid='test',password='123456',virtual_host='test')
chan = conn.channel()
chan.access_request('/data',active=True,read=True)
chan.exchange_declare('y','fanout',durable=False,auto_delete=False)

print '<<'
meg_body = raw_input()

meg = amqp.Message(meg_body,content_encoding='UTF-8')
meg.properties['delivery_mode'] = 2

chan.basic_publish(meg,'y',routing_key='love')


结果如下:
producer:
 RabbitMQ虚拟主机作用以及配置 - 毅 - 读书百遍,其意自现
 consumer:
 RabbitMQ虚拟主机作用以及配置 - 毅 - 读书百遍,其意自现

RabbitMQ是一个开源的消息代理和消息队列系统。它支持虚拟主机Virtual Host),每个虚拟主机相当于一个独立的消息系统,具有自己的队列、交换机和绑定等。在RabbitMQ中,通过虚拟主机可以实现不同的应用程序之间的消息隔离和安全性。下面是RabbitMQ虚拟主机配置方法: 1. 使用管理控制台创建虚拟主机RabbitMQ的管理控制台中,点击“Admin”->“Virtual Hosts”,在“Add a new virtual host”中输入虚拟主机名称,点击“Add virtual host”即可创建虚拟主机。 2. 使用命令行创建虚拟主机 通过RabbitMQ的命令行工具rabbitmqctl可以创建虚拟主机。具体命令如下: ``` rabbitmqctl add_vhost <虚拟主机名称> ``` 3. 配置虚拟主机的权限 为了保证虚拟主机的安全性,需要对虚拟主机进行权限控制。可以通过RabbitMQ的管理控制台或者命令行工具rabbitmqctl进行配置。 使用管理控制台:在“Admin”->“Virtual Hosts”中选择要配置虚拟主机,点击“Permissions”即可进行权限配置。 使用命令行工具rabbitmqctl:具体命令如下: ``` rabbitmqctl set_permissions -p <虚拟主机名称> <用户名> <配置> ``` 其中,<配置>表示该用户对于虚拟主机的权限配置,包括read、write、configure等。 4. 将队列、交换机绑定到虚拟主机 在创建队列、交换机时,需要将它们绑定到指定的虚拟主机。具体方法如下: 使用管理控制台:在“Admin”->“Queues”或者“Exchanges”中选择要绑定的队列或交换机,点击“Edit”->“Bindings”,在“Add binding”中选择虚拟主机和队列或交换机即可进行绑定。 使用命令行工具rabbitmqctl:具体命令如下: ``` rabbitmqctl set_permissions -p <虚拟主机名称> <用户名> <配置> ``` 其中,<配置>表示该用户对于虚拟主机的权限配置,包括read、write、configure等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值