阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RabbitMQ基础入门指南

467次阅读
没有评论

共计 4122 个字符,预计需要花费 11 分钟才能阅读完成。

1、背景

1)选择 RabbitMQ,而不是 ActiveMQ/ZeroMQ/Apache Qpid 的原因:

(1)RabbitMQ 难以置信的容易安装和使用。

(2)除了 Qpid 外,RabbitMQ 是唯一实现了 AMQP 标准的代理服务器。

(3)正是由于 Erlang,RabbitMQ 集群不可思议的简单。

(4)RabbitMQ 比竞争对手更可靠,更能防止崩溃。

2、安装和运行(CentOS 7)

1)由于 RabbitMQ 是采用 Erlang 编写的,因此需要先安装该语言库:

[root@localhost ~]# wget http://erlang.org/download/otp_src_19.1.tar.gz

[root@localhost ~]# tar -zxvf otp_src_19.1.tar.gz

[root@localhost ~]# cd otp_src_19.1/
# 若运行 configure 脚本时出现 ”No curses library functions found” 错误,则执行 yum install ncurses-devel
[root@localhost otp_src_19.1]# ./configure

[root@localhost otp_src_19.1]# make && make install

# erl 命令输出如下信息时,表示安装成功
[root@localhost otp_src_19.1]# erl
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.1  (abort with ^G)
1>

2)安装 RabbitMQ

(1)从 http://www.rabbitmq.com/download.html 获得压缩包(如 rabbitmq-server-3.6.6.tar.xz),解压得到 rabbitmq-server-3.6.6 目录。

(2)进入该目录,执行 make && make install。

3)运行:

[root@localhost rabbitmq-server-3.6.6]# bash ./deps/rabbit/scripts/rabbitmq-server

              RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /var/log/rabbitmq/rabbit@localhost.log
  ######  ##        /var/log/rabbitmq/rabbit@localhost-sasl.log
  ##########
              Starting broker…
 completed with 0 plugins.

此时可执行如下命令检查服务器状态:

# 输出代理服务器的状态、运行中的应用程序和节点等
[root@localhost rabbitmq-server-3.6.6]# bash ./deps/rabbit/scripts/rabbitmqctl status
Status of node rabbit@localhost …
[{pid,25640},
 {running_applications,[{rabbit,”RabbitMQ”,”3.6.6″},
                        {mnesia,”MNESIA  CXC 138 12″,”4.14.1″},
                        {os_mon,”CPO  CXC 138 46″,”2.4.1″},
                        {rabbit_common,[],”3.6.6″},
                        {xmerl,”XML parser”,”1.3.12″},
                        {ranch,”Socket acceptor pool for TCP protocols.”,
                              “1.2.1”},
                        {sasl,”SASL  CXC 138 11″,”3.0.1″},
                        {stdlib,”ERTS  CXC 138 10″,”3.1″},
                        {kernel,”ERTS  CXC 138 10″,”5.1″}]},
 {os,{unix,linux}},
… … 

3、基本概念

1)AMQP:高级消息队列协议。

从概念上来讲,AMQP 消息路由必须有三部分:交换器、队列和绑定。生产者把消息发布到交换器上;消息最终到达队列,并被消费者接收;绑定决定了消息如何从路由器路由到特定的队列。

RabbitMQ 基础入门指南

2)信道

你必须首先连接到 Rabbit,才能消费或者发布消息。一旦 TCP 连接打开(通过了认证),应用程序就可以创建一条 AMQP 信道。信道是建立在“真实的”TCP 连接内的虚拟连接。AMQP 命令都是通过信道发送出去的。每条信道都会被指派一个唯一 ID。

引入信道概念的原因:主要是对操作系统来说建立和销毁 TCP 会话是非常昂贵的开销。在一条 TCP 连接上创建多条信道,而不是创建多条 TCP 连接,既可以满足性能方面的要求,又能确保各个信道数据的私密性,就像拥有独立连接一样。

3)消息:包含有效载荷(payload)和标签(label)。有效载荷就是你想要传输的数据。标签描述了有效载荷,并且 RabbitMQ 用它来决定谁将获得消息的拷贝。

消费者接收到的每一条消息都必须进行确认:或者通过 AMQP 的 basic.ack 命令显式发送确认,或者在订阅到队列时将 auto_ack 参数设置为 true。

消费者拒绝消息的方法:一、从 RabbitMQ 服务器断开连接。RabbitMQ 将把消息重新入队并发送给另一个消费者。好处:所有 RabbitMQ 版本都支持。缺点:这样连接 / 断开连接的方式会额外增加 RabbitMQ 的负担。二、RabbitMQ 2.0.0 或以上版本可使用 AMQP 的 basic.reject 命令。如果把 reject 命令的 requeue 参数设置为 true,RabbitMQ 会将消息重新发送给下一个订阅的消费者。如果设置为 false,则会立即把消息从队列中移除,而不会把它发送给新的消费者(比如检测到一条格式错误的消息时)。你也可以通过对消息确认的方式来简单地忽略该消息。

4)队列

消费者从特定队列接收消息的方式:通过 AMQP 的 basic.consume 命令订阅;通过 AMQP 的 basic.get 命令从队列获得单条消息。

如果队列当前无人订阅,则消息会在队列中等待。当队列拥有多个消费者时,队列收到的消息将以循环的方式发送给消费者(负载均衡)。每条消息只会发送给一个订阅的消费者。

如何创建队列:通过 AMQP 的 queue.declare 命令。如果不指定队列名称,Rabbit 会分配一个随机名称并在 declare 命令的响应中返回。如果消息不能丢失,则生产者和消费者都应该尝试去创建队列(发送出去的消息如果路由到了不存在的队列,Rabbit 会忽略它们)。如果可以丢失,或你实现了一种方法来重新发布未处理的消息,则可以只让消费者创建队列。

5)交换器和绑定

生产者把消息发布到交换器上。然后,根据确定的规则(路由键),RabbitMQ 将决定消息该投递到哪个队列。队列通过路由键绑定到交换器。当你把消息发送到代理服务器时,消息将拥有一个路由键(可能为空),RabbitMQ 会将其和绑定使用的路由键进行匹配。如果匹配,则消息将投递到相应的队列。如果路由的消息不匹配任何绑定模式,则消息将进入“黑洞”。

有如下四种类型的交换器,每种类型实现了不同的路由算法:

(1)direct:如果路由键匹配,消息就被投递到对应的队列。服务器必须实现 direct 类型交换器,包含一个空白字符串名称的默认交换器。

(2)fanout:把消息投递给所有附加在此交换器上的队列(广播)。

(3)topic:使得来自不同源头的消息能够到达同一个队列。

(4)headers:允许你匹配 AMQP 消息的 header 而非路由键。除此之外,它和 direct 完全一致,但性能会差很多,因此不太实用,而且几乎再也用不到了。

6)虚拟主机(vhost):每一个 RabbitMQ 服务器都能创建虚拟消息服务器,我们称之为虚拟主机。

每一个 vhost 本质上是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器和绑定。更重要的是,它拥有自己的权限机制(AMQP 并没有指定权限控制是在 vhost 级别还是在服务器端级别实现。这留给了服务器的开发者去决定。在 RabbitMQ 的例子中,权限控制以 vhost 为单位)。这使得你能安全地使用一个 RabbitMQ 服务器来服务众多应用程序,因为各个 vhost 实例间实现了逻辑上的分离。另外,它还能避免队列和交换器的命名冲突。

当你在 Rabbit 里创建一个用户时,用户通常会被指派给至少一个 vhost,并且只能访问被指派 vhost 内的队列、交换器和绑定。

创建 vhost:rabbitmqctl add_vhost [vhost_name]。vhost 创建成功后,就可以连接上去并添加队列和交换器了。

删除 vhost:rabbitmqctl delete_vhost [vhost_name]。

查看 Rabbit 服务器上运行哪些 vhost:rabbitmqctl list_vhosts。

参考资料:

《RabbitMQ 实战:高效部署分布式消息队列》

RabbitMQ 实战:高效部署分布式消息队列 中文 PDF 扫描版下载见   http://www.linuxidc.com/Linux/2017-10/147592.htm

  本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-10/147591.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4122字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982065
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...