Shovel可以持续可靠的从源端队列(或交换器)获取消息并转发到目的端队列(或交换器)。远端队列和目的断队列可以位于同一个broker中(不同vhost)或者位于不同的broker中。
Shovel的优势在于:

  • 松耦合:Shovel可以移动不同管理域中Broker上的消息,这些Broker可以有不同的用户和vhost,可以运行在不同版本的RabbitMq和Erlang上。
  • 支持WAN:Shovel可以容忍时断时续的联通情形,并且可以保证消息的可靠性。
  • 高度定制:当Shovel连接成功后,可以对其进行配置通过AMQP命令。

一、Shovel的使用

首先在单机上启动了两个RabbitMq节点rabbitmq1@hadoop和rabbitmq2@hadoop,来作为源端与目的端。

(1)开始Shovel插件功能

Shovel插件开启后,web管理界面会出现Shovel Status和Shovel Management两个菜单。

(2)在rabbitmq2@hadoop上定义一个Shovel

其中src-uri和src-queue指定了源端的uri和源端队列,dest-uri和dest-queue指定了目的端uri和目的端队列。如果源队列和目的队列不存在,会自动创建。Shovel创建完成后如下图所示:


消息的流转如下图所示,看似消息直接有Shovel转发到了dest_queue,实际上中间经过了默认交换器的转发。

除了源端队列,目的段队列外,还有源端队列,目的端交换器和源端交换器,目的端浇交换器两种情况。

源端队列、目的端交换器

源端交换器,目的端交换器

二、参数说明

在定义Shovel时,会使用到各项参数,以下是各个参数的介绍。
Shovel

  • reconnect-delay:当Shovel连接断开后,等待重连的秒数,默认为1。
  • ack-mode:用于设置Shovel的消息确认模式。当设置为on-confirm时,消息被目的端成功接收后向源端发送确认消息,on-confirm可以处理由于网络异常和节点宕机造成消息丢失的;当设置为on-publish时,消息从源端被获取转发后,向源端发送确认消息,on-publish只能处理由于网络异常造成的消息丢失;当设置no-ack时,不会发送确认消息。默认on-confirm。
  • src-protocol:指定源端使用的AMQP协议,只能设置AMQP091和AMQP10,默认为AMQP091。
  • dest-protocol:设置目的端AMQP协议,同src-protocol。

AMQP 0.9.1 源端

  • src-uri:用于指定源端的AMQP URI,必须的。该参数值可以为一个字符串或者字符列表,当为字符列表时,Shovel随机从列表中选取一个URI,字符列表用于集群情况,不建议使用不同集群中节点的uri。
  • src-queue:指定源端queue。src-queue和src-exchange被要求必须设置一个,但不要求都设置。如果源端queue不存在,Shovel将自动创建一个durable的queue。
  • src-exchange:指定源端exchange。src-exchange和src-queue被要求必须设置一个,但不要求都设置。Shovel在从源端获取消息前,会声明一个exclusive的queue并使用src-exchange-key属性值绑定该源端exchange。如果源端exchange不存在并不会被创建,并且Shovel设置失败。
  • src-exchange-key:当设置src-exchange时所需的路由key。
  • src-prefetch-count:源端被转发的未确认消息的数量,默认为1000。
  • src-delete-after:用于确定是否删除自身。当为never时,表示从不删除;当设置为queue-length,启动时会检测queue的长度,消息被全部转发后,queue被删除;当被设置为其他整数,Shovel会转发该数量的消息后删除queue。

AMQP 0.9.1 目的端

  • dest-uri:指定目的端AMQP URI。强制的,同src-uri。
  • dest-queue:指定目的端queue,dest-queue和dest-exchange可以被设置一个,但不要求都设置,如果两者都没有被设置,消息会基于消息原始的exchange和路由key被投递。如果目的端queue不存在会被Shovel自动创建一个durable的queue。
  • dest-exchange:目的端exchange,dest-exchange和dest-queue可以被设置一个,但不要求都设置。如果目的端exchange不存才不会被创建,并且Shovel设置失败。
  • dest-exchange-key:当设置dest-exchange时所需的路由key,如果该属性没有被设置,使用消息原始的路由key。
  • dest-publish-properties:用于改写被Shovel的消息的属性的设置,针对header的设置暂不支持,默认为{}。
  • dest-add-forward-header:为Shovel的消息添加x-shovelled header属性,表示消息从哪里被Shovel哪里。
  • dest-add-timestamp-header:为Shovel的消息添加x-shovelled-timestamp header属性,表示消息Shovel转发的时间戳。

RabbitMq(5)Shovel相关推荐

  1. RabbitMQ(二):RabbitMQ高级特性

    RabbitMQ(二):RabbitMQ高级特性 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitM ...

  2. RabbitMQ(一):RabbitMQ快速入门

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括Rab ...

  3. RabbitMQ (四)实现延迟消息

    1 概述 常用的延迟消息实现方式有: 利用 队列TTL + 死信队列 方式实现 利用消息延迟插件实现 消息变成死信的原因有:​​​​ 消息过期.消息TTL或队列TTL 消息被拒绝.消费者调用了 cha ...

  4. 分布式消息队列 — RabbitMQ(3)

    目录 文章目录 目录 前文列表 前言 通道 Channel 一个基本的生产者/消费者实现 消费者 生产者 运行结果 应用预取计数 应用 ACK 机制 最后 前文列表 快速入门分布式消息队列之 Rabb ...

  5. RabbitMQ(七):常用方法说明 与 学习小结

    RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 RabbitMQ(三):Exchange交换器--fanout ...

  6. RabbitMQ(六):回调队列callback queue、关联标识correlation id、实现简单的RPC系统

    博客翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

  7. RabbitMQ(五):Exchange交换器--topic

    内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

  8. RabbitMQ(四):Exchange交换器--direct

    内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

  9. RabbitMQ(三):Exchange交换器--fanout

    内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

最新文章

  1. css超过两行显示为..._这6种组织CSS的方式,可以帮助你解决CSS扩展维护难的问题...
  2. 从春晚说起:总有一种无耻让我们泪流满面
  3. python学习总目录
  4. 基于Foursquare, 我们还能做什么 ?
  5. 编写一个c程序的头文件
  6. java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 人类最强运载火箭诞生!马斯克吹的牛再次兑现!
  8. CES 2021落下帷幕 未来3年展会时间已公布
  9. 攻克python3-面向对象
  10. php代码整理,值得注意的PHP代码样式规范
  11. [WEB] 详解Ajax实现网页数据异步更新并实时自动刷新
  12. 超大附件上传、下载特别慢,怎么破?
  13. 人脸测温门禁 传感器_测温人脸门禁什么牌子好
  14. iOS-xcode模拟器录屏
  15. 论文阅读—图像分割方法综述(二)(arXiv:[cs:cv]20200410)
  16. 【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室
  17. C#不四舍五入保留两位小数
  18. ps -aux 命令详解
  19. vue 快速入门指南(一)
  20. 清理电脑垃圾的命令代码

热门文章

  1. Java生成Json文件添加到ZIP压缩并导出
  2. 互联网产品分析的3大基础模型
  3. 暨大计算机学硕考研,暨南大学有几个校区计算机的研究生在哪个校区这个..._考研_帮考网...
  4. react PropTypes与 DefaultProps
  5. 51单片机读取DS18B20温度传感器
  6. 先转,再看《现象是什么? ——康德以及胡塞尔》
  7. Florian Winterstein将出任Jedox新首席执行官
  8. 【内附PDF资料】Python实现下载图片并生产PDF文件
  9. Wave Vector and Wavenumber(波矢与波数)
  10. c语言madplay播放音乐函数,声卡驱动程序-xiao_yan123-ChinaUnix博客