文档章节

rabbitmq——通过rabbitmqctl创建exchange和queue

hncscwc
 hncscwc
发布于 2014/11/17 15:20
字数 1075
阅读 2014
收藏 5

一般来说,exchange和queue都是由我们的业务程序在运行过程中连接到rabbitmq并创建的。然而也有些特殊的场景,要求业务程序在连接使用rabbitmq之前,相关的exchange和queue必须预先创建好。这个时候对于测试人员或者运维人员来说,通常的做法是在rabbitmq安装完成后,启用rabbitmq_management插件,然后在web控制台进行操作来创建exchange和queue,并完成绑定动作。

对于当前都是讲究自动化运维的时代,这种方式显然是不能自动化的。那么一些可能的改进的方式是搞个rabbitmq的客户端写个小程序,比如python的pika,通过在脚本中调用这些程序,并传递相应的参数完成exchange,queue的创建以及对应的绑定操作。

其实通过rabbitmq本身提供的rabbitmqctl命令,同样能完成exchange和queue的创建,例如:

rabbitmqctl eval 'rabbit_exchange:declare({resource, <<"/">>, exchange, <<"test-topic">>}, topic, true, false, false, []).'

rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"test-queue">>}, true, false, [], none).'

rabbitmqctl eval 'rabbit_binding:add({binding, {resource, <<"/">>, exchange, <<"test-topic">>}, <<"*.com.cn">>, {resource, <<"/">>, queue, <<"test-queue">>}, []}).'
这三条命令执行后的最终结果是:在 / 虚拟主机下创建了topic类型的,持久化的,名为 test-topic的exchange,创建了持久化的,名为 test-queue 的queue,该队列以 *.com.cn 的routing key绑定到了 test-topic这个exchange上。

=================================================================

对于 rabbitmqctl eval 官网的文档里解释是:计算任意的erlang表达式的值。

其实知道一点erlang语法的,一眼就可以看出上面的例子里,其实就是一个Module:Function(Arg)的调用。

这里需要注意:括号后的那个 . 可别忘了。

那么了解了这些后,剩下的就是exchange,queue创建及绑定动作应该调用哪个模块的哪个函数导出函数,参数的意义和格式是怎样的。

exchange的创建调用rabbit_exchange的declare函数,该函数具体声明为:

declare(XName, Type, Durable, AutoDelete, Internal, Args).

XName:      exchange的名称, 具体格式为 {resource, VHost, exchange, Name}
            VHost为虚拟主机的名称
            Name为exchange的名称
            注意 VHost 和 Name 限定为binary形式, 即<<>>
Type:       exchange的类型, 可选值为 direct, headers, topic, fanout
Durable:    是否需要持久化,  true表示持久化, false为非持久化
AutoDelete: 是否自动删除, true表示自动删除, false为非自动删除
Internal:   是否为rabbitmq内部使用, true表示是内部使用, false表示不是内部使用
Args:       exchange的其他选项参数, 一般设置为 []
补充说明:

自动删除的触发条件是:当绑定到该exchange上的所有queue和exchange都已经解除绑定时,rabbitmq自动删除该exchange。

内部使用是指:客户端不能直接向该exchange投递消息,只能由rabbitmq自己向这个exchange投递消息,一般用于exchange到exchange的绑定。另外,rabbitmq的trace机制使用的exchange也是internal类型。

queue的创建应调用rabbit_amqqueue模块的declare函数,该函数具体声明为:

declare(QueueName, Durable, AutoDelete, Args, Owner).

QueueName:  queue的名称, 具体格式为 {resource, VHost, queue, Name}
            VHost为虚拟主机的名称, Name为queue的名称
Durable:    是否需要持久化,  true表示持久化, false为非持久化
AutoDelete: 是否自动删除, true表示自动删除, false为非自动删除
Args:       queue的其他选项参数, 包括消息的优先级, ttl, 队列的最大长度等, 一般设置为 []
Owner:      用于queue的独占模式, 一般设置为 none


创建绑定关系是调用rabbit_binding模块的add函数,该函数具体声明为:
add(Binding)

Binding:  绑定关系, 可以是exchange到exchange, 也可以是exchange到queue

具体格式为 {binding, Source, Key, Destination, Args}
Source 为 消息源, 必须为exchange:  {resource, VHost, exchange, Name}
Key 为 routing-key
Destination 为目的 {resource,VHost,exchange,XName} 或者 {resource, VHost, queue, QName}
Args 为其他选项参数, 一般设置为 []


回过头来再看看前面例子中的命令,应该就不陌生了:)

=====================================================

总结:通过rabbitmqctl eval可以在命令行模式下完成exchange,queue的创建及绑定操作。这样配合shell脚本能较好的达到自动化的方式。



© 著作权归作者所有

共有 人打赏支持
hncscwc
粉丝 67
博文 70
码字总数 76137
作品 0
杭州
程序员
私信 提问
Centos7部署RabbitMQ 3.7.6

简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是...

阿dai
07/10
0
6
NET下RabbitMQ实践[配置篇]

这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战。当然不排除加餐情况。 介绍: rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozilla Public Licens...

长平狐
2012/11/06
282
0
消息队列RabbitMQ入门介绍

(一)基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发。我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉A...

icheer
2013/10/09
0
0
[RabbitMQ]RabbitMQ深入理解(一)进阶/管理/配置

本文源于朱忠华的《RabbitMQ实战指南》 RabbitMQ简介 消息队列中间件有两种传递模式:点对点 和 发布/订阅 点对点依靠队列的原理;发布/订阅则可以用于一对多的广播 消息中间件的作用:解耦、...

morpheusWB
10/16
0
0
RabbitMQ用户角色及权限控制

####################### #用户角色 ####################### RabbitMQ的用户角色分类: none、management、policymaker、monitoring、administrator RabbitMQ各类角色描述: none 不能访问 ......

nibilly
2015/04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
44分钟前
1
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
15
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
1
0
Confluence 6 文档主题合并问答

在 Confluence 官方 前期发布的消息 中,文档主题在 Confluence 6.0 及其后续版本中已经不可用。我们知道你可能对这个有很多好好奇的问题,因此我们在这里设置了一个问答用于帮助你将这个主题...

honeymose
今天
4
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部