问题标签 [rabbitmq-shovel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
454 浏览

erlang - 如何将 RabbitMQ Shovel 配置为用当前时间覆盖时间戳属性?

例如:

我很好奇如何以publish_properties某种方式编写,以便 RabbitMQ Shovel 用当前时间覆盖时间戳(就像当铲子接收到消息并将其到目标队列时一样)。

0 投票
1 回答
2666 浏览

erlang - 如何为 RabbitMQ / Erlang 使用多个配置文件

我正在尝试设置一个基于 Spring 的 Java 应用程序,该应用程序使用本地安装的 RabbitMQ 服务器在节点之间传递消息。众所周知,rabbitmq.config 文件可用于配置各种参数,并由运行 Rabbit 服务器的底层 Erlang 节点加载。

我的问题是我有一个要求,一些配置需要是静态的,一些需要是动态的,具体来说,我需要能够不时地重新配置运行在 Rabbit 服务器上的铲子作为用户交互的结果(即我需要以编程方式修改配置文件并重新启动rabbit服务器使其生效),但是,我不想每次都重写静态配置(特别是因为我不希望java代码阅读)。

我认为我通过阅读 Erlang 配置文件手册 ( http://www.erlang.org/doc/man/config.html ) 找到了解决方案,该手册解释了如何使用一个指向另一个配置文件的配置文件,以便两者的配置文件将由 Erlang 合并。不幸的是,它似乎根本不起作用,我在网上找不到任何关于这个问题的参考。

我正在使用 RabbitMQ 3.1.3 和 Erlang 5.10/OTP R16 在 Windows 7 x64 操作系统上对此进行测试。

第一个配置文件:

第二个配置文件:

我也尝试对路径使用单个反斜杠或位字符串,但这似乎并不重要。

在 cmd 中运行服务器的输出是:

任何类型的解决方案或帮助将不胜感激,

谢谢。

0 投票
2 回答
23051 浏览

rabbitmq - 何时使用 RabbitMQ 铲子以及何时使用联邦插件?

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

根据RabbitMQ网站上发布的信息,当我必须选择铲子或必须选择联邦插件时,我不明白。

RabbitMQ 有以下解释何时使用什么:

通常,当您需要比联邦提供的更多控制权时,您会使用铲子通过 Internet 链接代理。

我选择联邦时缺少的铲子细粒控制是什么?

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

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

总结我的问题:


  • 选择联邦时缺少的铲子细粒控制是什么?
  • 当我使用铲子时更改虚拟主机间通信的唯一方法是更改​​配置文件并重新启动实例是否正确?
  • 设置(每个应用程序的虚拟主机)是否有意义或者我完全错过了这一点?
0 投票
1 回答
5884 浏览

jms - RabbitMQ Shovel 基本示例

我正在研究一个基本示例,但无法解决。

我需要通过队列(TestQ)将消息从一台机器(Machine1)转发到另一台(Machine2)。生产者在 Machine1 上运行,消费者在 Machine2 上运行。

我在 Machine1 的 rabbit broker 配置中的设置:

Machine2 有一个默认配置,没有启用铲子插件。

在 Machine1 上运行的生产者代码:

在 Machine2 上运行的消费者代码:

执行 rabbitmqctl eval 'rabbit_shovel_status:status().' 在机器 1 上:

Producer sends ok, but I never get a receive from the consumer on the Machine2.

Where is a problem? Something is missing in the conf of Machine1's broker, or Machine2's broker?

Thank you!

0 投票
1 回答
814 浏览

rabbitmq - 分布式 POS 的 RabbitMq 架构

我们正在开发一个杂货销售点系统来替换现有的遗留系统。我们正在评估使用 RabbitMQ 将产品/价格变化发送到收银台。

一家公司可能有 1-50 家商店,每家商店可能有 1-20 个收银台。商店中的每个收银台都会收到相同的数据。

每家公司将有一个中央后台办公室。

在后台和每家商店都会有一个 Rabbit 经纪人。

在我当前的设计中,后台代理为每个商店设置了一个队列。后台服务器软件将更改推送到这些队列。

商店经纪人有一个扇出交换。当一个 till 连接到存储代理时,它会创建(如果尚不存在)一个持久队列。

我已经设置了从后台存储队列到存储交换的动态铲子。由于直到队列都是持久的并且消息是持久的,所以这应该是可靠的,不是吗?

我希望我已经充分解释了我想要实现的目标。这似乎是一个不错的解决方案?或者,还有更好的方法?

0 投票
3 回答
888 浏览

queue - 如何在rabbitmQ中丢弃一些消息

我有一个用例,我需要从我无法控制的交易所的队列中获取数据。用例是从这个队列中我不断收到消息。只是想知道在 rabbitmq 中或通过使用/编写插件,我是否可以一次丢弃 90% 的消息,然后再将它们保存到我的本地数据存储区。原因是我无法存储所有消息,但只能存储 10%。显然,一种方法是在我的应用程序中这样做。但我想知道是否有办法在rabbitmq级别上做到这一点。

只是想知道您对此是否有任何想法/解决方案。

0 投票
3 回答
2675 浏览

rabbitmq - RabbitMQ 配置动态铲错误 - '找不到组件铲'

安装 Shovel 插件后,我正在尝试在 RabbitMQ 3.2.3 上配置动态铲子。但是,当我运行以下命令时:

...我收到此错误消息:


该插件似乎已正确安装。如果我运行:

...我得到:


另外,如果我运行:

...我得到:


有任何想法吗?!提前致谢!

0 投票
0 回答
612 浏览

configuration - rabbitmq 3.3.4 shovel configuration is crashing start process

我正在尝试通过配置文件(在 docker 中运行)配置 shovel 插件,但出现此错误:

配置是这样设置的,因为当开发环境启动时,将根据需要创建铲子的目标......源是一个永久的 rabbitmq 实例,新的开发环境将附加到该实例运行。

以下是配置文件内容:

[更新] 这是在 docker 中运行的,但由于我无法在 docker 中调试问题,我尝试使用相同的配置文件在本地启动 rabbit。我在日志中注意到我设置的兔子配置系统变量(RABBITMQ_CONFIG_FILE)没有反映在日志中,并且没有应用铲子设置(不足为奇吧)。我使用 echo 语句验证了变量并显示了正确的路径:/dev/rabbitmq_server-3.3.4/rabbitmq

谢谢!

0 投票
1 回答
1498 浏览

rabbitmq - 我们可以使用 amqp://user:password@ 而不是 amqp://user:password@localhost 进行本地连接吗?

我们可以使用缩短的语法吗?有人建议我使用如此短的 amqp url 会强制rabbitmq 在“直接”模式下工作,这样效率更高。但是,当我为这样的铲子更改本地连接设置时,我不再在连接列表中看到这些连接。

0 投票
2 回答
5360 浏览

rabbitmq - 跨多个 rabbitMQ 实例的 RabbitMQ RPC

我有三个客户端,每个客户端都有自己的 RabbitMQ 实例,我有一个应用程序(我们称之为 appA),它有自己的 RabbitMQ 实例,三个客户端应用程序(app1、app2、app3)想要使用 appA 上的服务。

appA 上的服务需要 RPC 通信,app1、app2 和 app3 各有一个 booking.request 队列和一个 booking.response 队列。

在此处输入图像描述

使用铲子插件,我可以将所有 booking.request 消息从 app1-3 转发到 appA:

现在 appA 将响应 booking.response 队列上的请求,我需要rabbitMQ-appA 上的预订响应消息返回到 app1、app2 或 app3 上的正确 booking.response 队列,但不是全部 - 如何我应该在rabbitMQ-appA上设置一个铲子/联合队列,它将响应转发回正确的rabbitMQ(app1,app2,app3),该队列期望在他们自己的booking.response队列中得到响应?

所有这些应用程序都在使用 spring-amqp(如果相关)或者,我可以在 Spring 中设置一个 rabbitMQ 模板,它监听多个 rabbitMQ 队列并从每个队列中消费。

从文档中可以看出,典型的消费者是这样的:

是否可以指定多个连接工厂来执行此操作,即使连接工厂指向同一个 RabbitMQ 实例,但只是不同的虚拟主机:

在此处输入图像描述

更新

根据 Josh 的回答,我有多个连接工厂:

然后我会使用 SimpleRoutingConnectionFactory 来包装两个连接工厂:

现在,当我声明我的 rabbitMQ 模板时,我会将它指向 SimpleRoutingConnectionFactory 而不是单个连接工厂:

...然后像我通常使用的那样使用模板...

// 消息从两个 rabbitMQ 实例中消费

... 和 ...

// 消息发布到两个队列

我对么?