问题标签 [bunny]

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 投票
2 回答
913 浏览

ruby - 从 rabbitmq 队列中获取一条消息并取消订阅

我正在使用 RabbitMq 进行通信,我只想使用一条消息并取消订阅。如何在红宝石兔子中做到这一点?我的订阅块很简单:

0 投票
2 回答
362 浏览

ruby - Ruby - Elastic Search & RabbitMQ - 数据导入丢失,脚本静默崩溃

堆垛机

我在 RabbitMQ 队列中有很多消息(在我的开发环境中的本地主机上运行)。消息的有效负载是一个 JSON 字符串,我想直接加载到 Elastic Search 中(目前也在 localhost 上运行)。我写了一个快速的 ruby​​ 脚本来从队列中提取消息并将它们加载到 ES 中,如下所示:

队列中大约有 4,000,000 条消息。

当我运行脚本时,我看到一堆消息,比如 30 条消息,正在加载到 Elastic Search 中。但是,我看到大约 500 条消息离开队列。

然后脚本静默退出,不告诉我异常。开始/救援块永远不会触发异常,所以我不知道为什么脚本会提前完成或丢失这么多消息。接下来我应该如何调试的任何线索。

一个

0 投票
1 回答
2533 浏览

ruby-on-rails-3 - 如何在 Rails 和 Thin 中启动兔子线程

我正在将 RabbitMQ 的 Bunny gem 与 Rails 集成,我应该在 Rails 从应用程序启动开始的初始化程序中启动 Bunny 线程,还是在单独的 rake 任务中执行,以便我可以在单独的进程中启动它?

我认为如果我只生成消息,那么我需要在 Rails 初始化程序中执行它,以便它可以在整个应用程序中使用,但是如果我正在消费,我应该在单独的 rake 任务中执行它,这是正确的吗?

0 投票
1 回答
911 浏览

ruby - RabbitMQ - Ruby - Bunny - 将消息(重新)发布到下一个队列的最佳实践

我们正在检查 RabbitMQ 的一些工作流用例。

到目前为止,我们使用 ruby​​ 创建了一个测试环境,它符合我们的需求并且看起来运行良好。

如果是 Rabbit 新手,我的问题是关于最佳/良好实践。

让我们定义 3 个队列(仅用于示例)

  1. Q_DECISION
  2. Q_RIGHT
  3. Q_LEFT

每个生产者都会在 Q_DECISION 中发布消息

有一个工作人员在该队列上运行,它检查身体的一些内容。在决定的情况下,消息/任务必须移动到 Q_LEFT 或 Q_RIGHT。

我们正在存储特定于消息的信息 properties.headers,因此我们重复它们以及正文。

到目前为止没问题,现在的问题是关于重新发布:

如果我们像上面那样重新发布,我们是否会从上一条消息中丢失一些东西?

也有很多属性定义/存储在delivery_info其中properties

我们必须重新发布它们还是只发布自己创建的标题和正文?

0 投票
2 回答
2349 浏览

rabbitmq - RabbitMQ - 计划队列 - 死信队列 - 良好实践

我们已经用 Rabbit 设置了一些工作流环境。

它解决了我们的需求,但我想知道像我们为计划任务那样做是否也是一种好习惯。

调度意味着没有任务关键的 100% 调整时间。因此,如果应在 60 秒后重试作业,这确实意味着 60 多秒,这取决于处理队列的时间。

我创建了一个 Q_WAIT 并制作了一些标题来传输设置。

让我们这样做:

Worker 正在运行订阅 Q_ACTION

如果操作错过(例如 smtp 服务器不可访问)

->(重新)将消息发布到 Q_WAIT 并设置 properties.headers["scheduled"] = time + 60seconds


另一个进程每 15 秒循环一次通过方法 pop() 而不是订阅的 Q_WAIT 中的所有消息


在每个循环之后,连接关闭,因此 NOT (Re-)Published 留在 Q_WAIT 中,因为它们没有被确认。


有人可以确认这是一种有效的(良好)做法。

0 投票
1 回答
12856 浏览

rabbitmq - 为 RabbitMQ 确认消息设置长超时

我想知道这是否可能。我想从队列中拉出一个任务,并且在将 ack 发送回 RabbitMQ 通知工作已完成之前可能需要 3 秒或更长时间(可能)分钟的任何工作。工作由用户完成,因此这就是处理工作所需时间不同的原因。

我不想在退出队列后立即确认消息,因为如果没有收到确认,我希望将消息重新排队。谁能给我任何关于如何解决我的问题的见解?

0 投票
1 回答
16123 浏览

rabbitmq - RabbitMQ 在生产系统上更改队列参数

我在面向服务的体系结构中使用 RabbitMQ 作为消息队列,其中许多单独的 Web 服务发布绑定到 RabbitMQ 队列的消息。这些队列依次由执行后台工作的各种消费者订阅;RabbitMQ 的一个非常普通的用例。

现在我想更改一些队列参数(具体来说,我想将队列绑定到具有特定路由键的新死信交换)。我的问题是,由于几个原因,在生产系统上进行这种更改是有问题的。

在生产系统中不丢失消息的情况下,让我过渡到这些新队列的最佳方式是什么?

我已经考虑了从版本控制队列名称到使用新设置创建新虚拟主机到进行所有更改的所有内容。

以下是我面临的一些问题:

  1. 因为 RabbitMQ 队列是幂等的,不同的 Web 服务在发布到它们之前已经声明了队列(以防它们不存在)。一旦更改了队列参数(但保持相同的路由键),队列声明失败并且 RabbitMQ 关闭通道。

  2. 我希望在更改队列时不会丢失消息(在这里我计划订阅一个独占消费者来保存消息然后重新发布到新队列)。

  3. 不同的发布者和消费者群之间的一般协调(或者,甚至更好的一种避免需要协调它们的方法)。

0 投票
1 回答
5179 浏览

rabbitmq - RabbitMQ 消息状态

我目前在VersionEye使用 RabbitMQ ( bunny )通过 GitHub API 导入有关 GitHub 存储库的元信息。根据 GitHub 存储库的数量,一个任务可能需要几秒钟到几分钟的查看时间。我像这样创建一个新消息/任务:

其中一名工人将收到消息并执行工作。worker 在 Memcached 中设置他的状态(RUNNING,DONE)。这样我就知道什么时候完成任务了!

我想在那个过程中摆脱 Memcached。我想从 RabbitMQ 获取消息的状态。像这样的东西是理想的:

不幸的是,我在 RabbitMQ 或 Bunny 文档中找不到类似的东西。有人知道如何从 RabbitMQ 获取消息的状态吗?

0 投票
2 回答
1141 浏览

rabbitmq - 如何将消息发布到现有交易所

我正在玩兔子,并尝试将消息发布到现有队列。不幸的是,Bunny 内部的文档是针对消费者创建的,而不是针对生产者的。因此,例如,当我尝试绑定到某个交换时,它会引发错误

代码:

你知道它为什么要重新声明吗?

也许我需要先绑定到队列?

谢谢你的帮助。

0 投票
1 回答
3016 浏览

testing - Rails - 使用 Rspec 测试 RabbitMQ 通知。我正在使用兔子宝石

我正在开发一个非常小的应用程序,它是一个 RabbitMQ 通知系统。当状态改变时,它会触发 API 调用。那部分很好,我相信它工作正常。我遇到的问题是测试通知部分,我正在使用 rspec 并且我没有办法测试通知,或者不知道方法。我听说过在测试中模拟RabbitMQ调用,但我不知道具体是什么意思。谁能解释一下?谢谢你。