何时使用 RabbitMQ 铲子以及何时使用 Federation 插件?

2024-03-27

对于我工作的公司,我们希望使用 RabbitMQ 作为我们的主要消息总线。我们的想法是,每个应用程序都使用自己的虚拟主机进行内部通信,并且通过 shovel 或联合插件,我们可以在多个虚拟主机(甚至可能是多台机器(非集群))之间共享某些类型的事件。 我们选择每个虚拟主机的应用程序来将内部通信与公共事件分开,并保持每个应用程序的安全性可调。

根据网上公布的信息RabbitMQ http://www.rabbitmq.com网站 当我必须选择铲子或当我必须选择联邦插件时,我不明白。

RabbitMQ 有以下功能解释 http://www.rabbitmq.com/distributed.html何时使用什么:

通常,当您需要比联盟提供的更多控制权时,您会使用铲子通过互联网链接经纪人。

当我选择联合时,我缺少的铲子中的细粒控制是什么?

目前,我想我更喜欢联邦插件,因为我可以通过联邦插件提供的 REST API 自动化虚拟主机间通信。 如果是铲子,每次我们想要在虚拟主机之间共享事件时,我都需要更改铲子配置并重新启动 RabbitMQ 实例。我的想法正确吗?

目前,我们正在 Windows 上运行 RMQ,客户端通过 .NET 连接。在不久的将来,Java/Perl/PHP 客户端将加入。

总结一下我的问题:

  • 当我使用铲子时,我所缺少的细粒度控制是什么?
    选择联邦?
  • 改变的唯一方法是否正确 当我使用铲子时,虚拟主机间通信是通过更改配置文件并重新启动实例来实现的吗?
  • 设置(每个应用程序的虚拟主机)是否有意义,还是我完全忽略了这一点?

Shovel 和队列提供了将消息从一个 RabbitMQ 节点转发到另一个节点的不同方法。

联合交易所

通过联合交换,队列可以连接到上游(源)节点上的队列。此外,下游(目标)节点上的交换将接收发布到上游节点的消息的副本。

联合交换类似于交换到交换的绑定,因为它们可以(可选)从上游交换订阅一组有限的消息。

联合队列(注意:这些是 RabbitMQ 3.2.x 中的新增功能)

通过联合队列,消费者可以连接到上游(源)和下游(目标)节点上的队列。

本质上,下游队列是上游队列上的消费者,期望会有额外的下游消费者以与附加到上游队列的消费者相同的方式处理消息。

下游(联合)队列消耗的任何消息将不可用于上游队列上的消费者。

使用案例:

如果消费者从一个节点迁移到另一个节点,联合队列将允许这种情况发生,而不会丢失消息或处理两次。

使用案例:来自 RabbitMQ 文档 http://www.rabbitmq.com/federated-queues.html

典型的用途是分布相同的“逻辑”队列 超过许多经纪人。每个代理将声明一个联合队列 上游的所有其他联合队列。 (这些链接将形成一个 n 个队列上的完整双向图。)

Shovel

另一方面,铲子将“上游”队列附加到“下游”交换。 (我将这些术语放在引号中,因为 shovel 文档没有描述与联合文档具有相同语义的节点。)

铲子消耗队列中的消息并将它们发送到目标节点上的交换器。 (注意:虽然通常不作为该模式的一部分进行讨论,但没有什么可以阻止消费者连接到源节点上的队列。)

回答具体问题:

当我使用铲子时,我所缺少的细粒度控制是什么? 选择联邦?

铲子不会have驻留在“上游”或“下游”节点上。它可以从独立节点进行配置和操作。

shovel 可以自行创建链接的所有元素:源队列、队列的绑定和目标交换。因此,它对于源节点或目标节点都是非侵入性的。

当我使用 shovels 时更改虚拟主机间通信的唯一方法是更改​​配置文件并重新启动实例,这是否正确?

这通常是铲子公认的缺点。

使用以下命令(警告:仅在 RabbitMQ 3.1.x 上测试,并且具有非常具体的rabbitmq.config仅包含 ) 的文件,您可以从指定文件重新加载铲子配置。 (在这种情况下/etc/rabbitmq/rabbitmq.config)

rabbitmqctl eval 'application:stop(rabbitmq_shovel), {ok, [[{rabbit, _}|[{rabbitmq_shovel, [{shovels, Shovels}] }]]]} = file:consult("/etc/rabbitmq/rabbitmq.config"), application:set_env(rabbitmq_shovel, shovels, Shovels), application:start(rabbitmq_shovel).'

.

设置(每个应用程序的虚拟主机)是否有意义或者我错过了 点完全?

这个决定将取决于您的用例。虚拟主机主要提供队列/交换器和授权用户之间的逻辑(和访问)分离。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 RabbitMQ 铲子以及何时使用 Federation 插件? 的相关文章

  • 使用 STOMP 连接 RabbitMQ 时如何重播丢失的消息?

    我有一个 iOS 应用程序 它使用STOMP客户端 https github com juretta objc stomp交谈RabbitMQ https www rabbitmq com 应用程序在启动期间加载大量状态 然后通过接收 ST
  • RabbitMQ 中的并发

    经过一周的编码和搜索论坛后 似乎是时候问 我有一个 C 应用程序 它使用 EventingBasicConsumer 处理 RabbitMQ 发送的消息 我想同时处理多个消息 因此我在同一连接上实例化了几个通道 本例中为 8 个 每个通道都
  • 使用spring-amqp和rabbitmq实现带退避的非阻塞重试

    我正在寻找一种使用 spring amqp 和 Rabbit MQ 的退避策略来实现重试的好方法 但要求是侦听器不应被阻止 因此可以自由地处理其他消息 我在这里看到了类似的问题 但它不包括 后退 的解决方案 RabbitMQ 和 Sprin
  • 在 Docker 中使用 RabbitMQ 删除容器

    我尝试使用RabbitMQ启动Docker容器 结果下载了镜像 但容器没有启动 我在日志中收到以下消息 error RABBITMQ DEFAULT PASS is set but deprecated error RABBITMQ DEF
  • 在 django 中使用 pika 的 Rabbitmq 监听器

    我有一个 django 应用程序 我想使用来自rabbit mq 的消息 我希望监听器在启动 django 服务器时开始使用 我正在使用 pika 库连接到rabbitmq 提供一些代码示例确实会有帮助 首先 您需要在 django 项目开
  • 与 RabbitMQ 相比,Amazon SQS 的性能较慢

    我想在我的 Web 应用程序中集成消息队列中间层 我测试了 Rabbitmq 和 Amazon SQS 但发现 Amazon SQS 速度很慢 我在 Amazon SQS 中每秒收到 80 个请求 而在 Rabbitmq 中每秒收到 200
  • 我应该在 Django 项目中使用 Celery 还是 Carrot?

    我有点困惑我应该使用哪一个 我认为两者都可以 但其中一个比另一个更好或更合适吗 http github com ask carrot tree master http github com ask carrot tree master ht
  • 如何根据条件限制并发消息消耗

    场景 我已经简化了事情 许多最终用户可以从前端 Web 应用程序 生产者 开始工作 繁重的工作 例如渲染大型 PDF 这些作业被发送到单个持久的 RabbitMQ 队列 许多工作应用程序 消费者 处理这些作业并将结果写回到数据存储中 这个相
  • 如何在 celery task.apply_async 中使用优先级

    我有一个testcelery 中的队列 我为它定义了一个任务 celery app task queue test ignore result True def priority test priority print priority 它
  • 保持鼠兔 BlockingConnection 存活而不禁用心跳

    我正在使用 pika 0 10 0 和 python 2 7 版本开发 RabbitMQ 消费者 在我的消费者客户端中 我有一个根据输入消息运行一段时间的进程 时间可能从 3 到 40 分钟不等 我不想禁用心跳 相反 我正在寻找一些回滚机制
  • 使用Camel的spring-rabbitmq组件时如何自动声明交换?

    我正在尝试从 Camel 3 x 迁移到 Camel 4 x 版本 因此我需要从rabbitmq替换组件spring rabbitmq With rabbitmq我正在使用的组件declare https camel apache org
  • Akka 的语言和产品替代品是什么?

    现在我正在看游戏框架 https www playframework com 并且非常喜欢它 Play 中提供的功能中最受宣传的部分之一是Akka http akka io 为了更好地理解 Akka 以及如何正确使用它 您能告诉我其他语言或
  • 何时使用 RabbitMQ 铲子以及何时使用 Federation 插件?

    对于我工作的公司 我们希望使用 RabbitMQ 作为我们的主要消息总线 我们的想法是 每个应用程序都使用自己的虚拟主机进行内部通信 并且通过 shovel 或联合插件 我们可以在多个虚拟主机 甚至可能是多台机器 非集群 之间共享某些类型的
  • 在 RabbitMQ 监听器中隐藏运行时异常

    在某些故意发生的情况下 我使用了一些异常来拒绝消息 但在控制台中显示了乍一看似乎不太正常的异常 如何在登录控制台 文件时隐藏该特定异常 我正在使用 spring boot 和默认记录器 public static class Undispa
  • 如何在nodejs中验证rabbitmq?

    错误 握手被服务器终止 403 ACCESS REFUSED 消息 ACCESS REFUSED 使用身份验证拒绝登录 旋转机制平原 有关详细信息 请参阅代理日志文件 我单独尝试了 authMechanism PLAIN AMQPLAIN
  • 列出与rabbitmq java客户端API交换的绑定

    我似乎在文档中找不到任何信息 所以我想知道是否可以通过某种方式使用 java RabbitMQ API 获取与交换相关的所有绑定 我在查询 api bindings 时正在寻找类似 http api 结果的内容 api definition
  • RabbitMQ - 升级到新版本并收到很多“PRECONDITION_FAILED Unknown Delivery Tag 1”

    刚刚升级到新版本的 RabbitMQ 2 3 1 现在出现以下错误 PRECONDITION FAILED unknown delivery tag 1 随后通道关闭 这适用于较旧的 RabbitMQ 无需客户端更改 在应用程序行为方面 当
  • Django、RabbitMQ 和 Celery - 为什么在我更新开发中的 Django 代码后,Celery 会运行旧版本的任务?

    所以我有一个 Django 应用程序 它偶尔会向 Celery 发送任务以进行异步执行 我发现 当我在开发中处理代码时 Django 开发服务器知道如何自动检测代码何时发生更改 然后重新启动服务器 以便我可以看到我的更改 然而 我的应用程序
  • 在rabbitmq配置spring boot中在AMQP中配置多个Vhost

    我正在实现一个项目 我必须在rabbitmq中的不同虚拟主机之间发送消息 使用 SimpleRoutingConnectionFactory 但得到 java lang IllegalStateException 无法确定查找键的目标 Co
  • AMQP如何克服直接使用TCP的困难?

    AMQP如何克服直接使用TCP发送消息时的困难 或者更具体地说 在发布 订阅场景中 在 AMQP 中 有一个代理 该代理接收消息 然后完成将消息路由到交换器和队列的困难部分 您还可以设置持久队列 即使客户端断开连接 也可以为客户端保存消息

随机推荐

  • 为什么我的 Oracle JVM 会为一个简单的“Hello World”程序创建所有这些对象?

    我正在玩jmap并发现简单的 Hello World Java 程序创建了数千个对象 这是对象的截断列表Oracle JVM 更新 131启动时创建 num instances bytes class name 1 402 4903520
  • geom_text 仅位于堆积条形图的顶部

    我想仅在堆叠条形图的顶部添加标签 这是我的数据框 create data frame building lt c Burj nKhalifa Zifeng nTower Bank of nAmerica Tower Burj Al Arab
  • 正则表达式,我可以排除字符对吗?

    如何从正则表达式中排除字符对 我正在尝试获取一个包含 5 个字母数字字符的正则表达式 后跟 除 XX 和 AD 之外的任何内容 后跟 XX So D22D0ACXX 会匹配 但是下面两个不会匹配 D22D0ADXX D22D0XXXX 我的
  • 将代理模型实例分配给外键

    我有一个 django auth 用户代理模型 它附加了一些额外的权限 如下所示 class User User class Meta proxy True permissions write messages May add new me
  • 中间人控制台:如何使用?

    我想知道如何使用middleman console 是一个简单的irb吗 我能用它做什么与简单的 irb 不同的事情 middleman console options Start an interactive console in the
  • 如何在量角器中设置单选按钮值

    我是量角器新手 我正在尝试使用量角器设置单选按钮值 我在互联网和 SO 上搜索了徒劳的答案 html
  • 使用 Hilt 提供首选项数据存储

    我试图提供一个共同的DataStore
  • 使用 Amazon S3 的 Active Storage 不使用指定的文件名进行保存,而是使用文件密钥进行保存

    我在使用 Active Storage 时遇到问题 当我上传到 Amazon S3 时 不是使用原始名称将文件保存在存储桶内 例如myfile zip它正在将其另存为key与该文件关联 所以在 Cyber duck 中我看到这样的东西 5Y
  • 使用 PHP 为 Apple 钱包通行证创建 PKCS #7 分离签名

    这对我来说是一个全新的概念 所以我在黑暗中拍摄 要创建签名文件 请创建 PKCS 7 分离签名 清单文件 使用与您的签名关联的私钥 证书 将 WWDR 中间证书包含在 签名 您可以从 Apple 网站下载此证书 将签名写入pass顶层的文件
  • 确保为一组定义一个且仅有一个默认值

    我有一个与地址表具有一对多关系的客户表 我想限制数据库以便客户with地址将始终有一个 且只有一个 默认地址 我可以很容易地添加一个约束 以确保每个客户只有一个默认地址 然而 我正在努力解决如何应用一个约束来确保地址始终被标记为默认地址 总
  • 距 X-Y-Z 日期还有多少天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试构建一个倒计时小部件 给定某个日期 PHP 中确定距该日期还有多少天的最简单方法是什么
  • 无法将可等待传递给 asyncio.run_coroutine_threadsafe

    我观察到asyncio run coroutine threadsafe函数不接受一般的可等待对象 我不明白这种限制的原因 观察 import asyncio async def native coro return asyncio cor
  • 如何生成 5 个总和为 100 的随机数 [重复]

    这个问题在这里已经有答案了 你知道一种将整数分成 5 组的方法吗 每组总数必须是随机的 但总数必须等于固定数字 例如我有 100 我想把这个数字分成 1 20 2 3 3 34 4 15 5 18 编辑 我忘了说 是的 平衡是一件好事 我想
  • Android 中的内存不足错误

    我创建了一款使用图像的游戏 并且我的游戏处于纵向和横向模式 我有两种不同的布局 当我从 1 方向切换到其他方向时 执行此操作 5 6 次后 会出现强制关闭错误 错误是这样的 原因 java lang OutOfMemoryError 位图大
  • 正确完成管道中的多处理

    我想知道多重处理是如何正确完成的 假设我有一个清单 1 2 3 4 5 由函数生成f1这是写到Queue 左绿色圆圈 现在我启动两个从该队列中提取的进程 通过执行f2在过程中 他们处理数据 例如 将值加倍 并将其写入第二个队列 现在 函数f
  • 在纯函数语言中,有没有算法可以得到反函数?

    在像 Haskell 这样的纯函数语言中 是否有一种算法可以在双射时获得函数的逆函数 编辑 有没有一种特定的方法来对你的函数进行编程 在某些情况下 是的 有一种漂亮的纸叫其中讨论了几种情况 当你的函数足够多态时 可以完全自动地导出反函数 它
  • r 两个方向都有误差条的散点图

    如何创建在两个方向上带有误差线的散点图 通常误差线位于垂直方向 即 y 值的不确定性 但是我的数据的 x 值也存在不确定性 X ErrX Y ErrY 1 0 0 1 3 0 0 2 1 5 0 3 4 2 0 1 etc Using gg
  • Golang 中的 Shell 扩展(命令替换)

    Go 支持变量扩展 例如 os ExpandEnv 测试 USER gt gt 测试 MyName 但有没有办法扩展可执行文件 就像 shell 的行为方式一样 就像是 os ExpandExecutable 测试 日期 H M gt gt
  • Javascript 获取 PHP 变量中的屏幕宽度

    我有一个响应式网站 其中有简单的下拉登录菜单 http www red team design com simple and effective dropdown login box当网站处于其他导航链接旁边的 桌面 视图 屏幕可用宽度 g
  • 何时使用 RabbitMQ 铲子以及何时使用 Federation 插件?

    对于我工作的公司 我们希望使用 RabbitMQ 作为我们的主要消息总线 我们的想法是 每个应用程序都使用自己的虚拟主机进行内部通信 并且通过 shovel 或联合插件 我们可以在多个虚拟主机 甚至可能是多台机器 非集群 之间共享某些类型的