前言
virtual host
的主要作用是隔离、权限。
隔离:发送的消息的时候只有在virtual host
下的满足条件的队列才能接受到消息,比如现在存在virtual1
和virtual2
,如果这两个virtual host
中都存在exchangeA
和队列queueA
,队列的路由键为keyA
,这个时候往virtual1
发送exchangeA ,keyA
,只有virtual1
的队列能接受到消息。
权限:新建完virtual host
就要指定该virtual host
是属于哪个账户的,这样就可以控制哪些帐号使用哪些virtual host
。
代码新建virtual host
依赖包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>http-client</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9.3</version>
</dependency>
代码
这里介绍下com.rabbitmq.http-client
包,这个包专门是用来以restful
的形式请求rabbit
开放的api接口,比如常见的新建交换机、新建队列、获取队列等都包含在Client
类中,如果配合定时任务,完全可以监控rabbitmq
的消息堆积。以下是新建virtual host
的代码。
public static void main(String[] args) throws MalformedURLException, URISyntaxException, JsonProcessingException {
String api = "http://192.168.5.4:15672/api";
Client client = new Client(api, "admin", "admin");
// 新建/card virtual host
client.createVhost("/card");
UserPermissions userPermissions = UserPermissions.FULL;
// 将新建的virtual host 授权给 admin帐号
client.updatePermissions("/card", "admin", UserPermissions.FULL);
}
image.png
网友评论