标签:命名 虚拟机 用户访问 opener pass chm source 入口 行数据
原文:RabbitMQ入门教程(十三):虚拟主机vhost与权限管理
分享一个朋友的人工智能教程。比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看。
每一个RabbitMQ服务器都能创建虚拟消息服务器,我们称之为虚拟主机。每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的交换机、队列、绑定等,拥有自己的权限机制。vhost之于Rabbit就像虚拟机之于物理机一样。他们通过在各个实例间提供逻辑上分离,允许为不同的应用程序安全保密的运行数据,这很有,它既能将同一个Rabbit的众多客户区分开来,又可以避免队列和交换器的命名冲突。RabbitMQ提供了开箱即用的默认的虚拟主机“/”,如果不需要多个vhost可以直接使用这个默认的vhost,通过使用缺省的guest用户名和guest密码来访问默认的vhost。
vhost之间是相互独立的,这避免了各种命名的冲突,就像App中的沙盒的概念一样,每个沙盒是相互独立的,且只能访问自己的沙盒,以保证非法访问别的沙盒带来的安全隐患。
rabbitmqctl list_vhosts
rabbitmqctl add_vhost <vhost_name>
rabbitmqctl delete_vhost <vhost_name>
add_user <username> <password>
set_user_tags <username> <tag>
// 设置这个才能在页面上登录,tag可以为administrator, monitoring, managementset_permissions [-p <vhost>] <user> <conf> <write> <read>
权限配置是针对于vhost进行配置的,如果有多个vhost,如果某个用户需要相同的配置就要配置多次。".":匹配任何队列和交换器,"checks-.":只匹配checks-开头的队列和交换器,"":不匹配队列和交换器,
? ~ rabbitmqctl add_user root root
Creating user "root"
? ~ rabbitmqctl set_user_tags root administrator
Setting tags for user "root" to [administrator]
? ~ rabbitmqctl add_vhost my_vhost
Creating vhost "my_vhost"
? ~ rabbitmqctl set_permissions -p my_vhost root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "my_vhost"
public class Producer {
@Test
public void testBasicPublish() throws IOException, TimeoutException, InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
// 指定虚拟主机的名称,默认是"/"
factory.setVirtualHost("my_vhost");
factory.setHost("127.0.0.1");
factory.setPort(AMQP.PROTOCOL.PORT);
factory.setUsername("root");
factory.setPassword("root");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String EXCHANGE_NAME = "exchange.direct";
String QUEUE_NAME = "queue_name";
String ROUTING_KEY = "key";
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
String message = "Hello RabbitMQ:";
try {
channel.txSelect();
for (int i = 0; i < 5; i++) {
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, (message + i).getBytes("UTF-8"));
}
channel.txCommit();
} catch (Exception e) {
channel.txRollback();
}
channel.close();
connection.close();
}
}
分享一个朋友的人工智能教程。比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看。
RabbitMQ入门教程(十三):虚拟主机vhost与权限管理
标签:命名 虚拟机 用户访问 opener pass chm source 入口 行数据
原文地址:https://www.cnblogs.com/lonelyxmas/p/11865810.html