文档章节

rabbitmq——通过rabbitmqctl创建exchange和queue

hncscwc
 hncscwc
发布于 2014/11/17 15:20
字数 1075
阅读 1434
收藏 5
点赞 1
评论 0

一般来说,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
粉丝 64
博文 66
码字总数 76137
作品 0
杭州
程序员
openstack 最简单的 RabbitMQ 监控方法

先来看张图: 这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue。数据库保存状态信息,而几乎所有的 nova-* 服务都直接依赖于 Queue 实现服务之间的通信和调用...

zhongbeida_xue ⋅ 05/09 ⋅ 0

RabbitMQ学习系列(六): RabbitMQ 高可用集群

前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用。不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/category/855479.html 本来一直想写一...

andrewniu ⋅ 05/09 ⋅ 0

RabbitMQ学习系列 : RabbitMQ安装与配置

1.安装     Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang。     erlang:http://www.erlang.org/download.html     rabbitmq:http://www....

andrewniu ⋅ 05/09 ⋅ 0

消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠 ⋅ 05/25 ⋅ 0

消息中间件—RabbitMQ(初探篇)

文章摘要:本篇文章为RabbitMQ的入门文章,不像其他一些程序代码和应用实战性的文章会带着大家从一个“Hello World”的简单例子出发,在该篇幅中主要给大家讲下RabbitMQ消息队列的起源、为何...

癫狂侠 ⋅ 05/23 ⋅ 0

RabbitMQ在Ubuntu上的环境搭建

环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的速度,点击查看:《Ubuntu apt-get和...

vipstone ⋅ 06/14 ⋅ 0

Spring Boot+RabbitMQ学习笔记

RabbitMQ RabbitMQ 是一个由 Erlang 语言开发的 的开源实现。最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 消息队列 先从基础开始,加...

听_风 ⋅ 06/07 ⋅ 0

通过实例理解 RabbitMQ 的基本概念

先说下自己开发的实例。 最近在使用 Spring Cloud Config 做分布式配置中心(基于 SVN/Git),当所有服务启动后,SVN/Git 中的配置文件更改后,客户端服务读取的还是旧的配置,并不能实时读取...

xumaojun ⋅ 05/06 ⋅ 0

RabbitMQ系列(一):Windows下RabbitMQ安装及入门

1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就...

xiaomin0322 ⋅ 05/09 ⋅ 0

rabbitmq单点及集群搭建 与简单使用

单点搭建rabbitmq 安装epel源 yum install -y epel-release.noarch yum clean all && yum makecache fast && yum repolist enabled 安装依赖包 yum install -y erlang xmlto wget 安装 wget......

yr_linux运维 ⋅ 05/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud 微服务 (六) 服务通信 RestTemplate

壹 通信的方式主要有两种,Http 和 RPC SpringCloud使用的是Http方式通信, Dubbo的通信方式是RPC 记录学习SpringCloud的restful方式: RestTemplate (本篇)、Feign 贰 RestTemplate 类似 Http...

___大侠 ⋅ 5分钟前 ⋅ 0

React创建组件的三种方式

1.无状态函数式组建 无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。 无状态函数式组...

kimyeongnam ⋅ 12分钟前 ⋅ 0

react 判断实例类型

今天在写组件的时候想通过判断内部子元素不同而在父元素上应用不同的class,于是首先要解决的就是如何判断子元素的类型。 这里附上一个讲的很全面的文章: https://www.cnblogs.com/onepixel...

球球 ⋅ 18分钟前 ⋅ 0

Centos7备份数据到百度网盘

一、关于 有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百...

zctzl ⋅ 32分钟前 ⋅ 0

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 35分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 43分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 今天 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部