问题标签 [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 投票
1 回答
225 浏览

ruby - 用兔子宝石直接回复伪队列

我正在使用 bunny 2.7.0 在 ruby​​ 2.3 中创建一个 rabbitmq rpc,我已经为每个客户端创建了一个回复队列。但是我预计会有相当多的客户,这样做效率不高。我想使用rabbitmq的直接回复功能

在最后一行代码我收到错误

理论上这是由于http://rubybunny.info/articles/queues.html而预期的

但另一方面 - 有一篇文章https://www.rabbitmq.com/direct-reply-to.html描述了该队列的存在性和可用性。

我想声明一个队列,因为我需要订阅它才能接收响应

我不明白我做错了什么(

有类似的主题与这种方法的示例,但在其他语言和工具(如 nodejs)上创建,并且似乎工作正常。我对兔子做错了什么?

更新

发现了问题 - 我使用了 odler 版本的 rabbitmq 服务器。那个id不支持直接回复队列的

0 投票
1 回答
411 浏览

ruby - Bunny Connection Net::ReadTimeout 的故障救援

我有一个使用 Bunny Gem 连接到 rabbitmq 实例的 ruby​​ 脚本。该脚本工作了一段时间,但最终会因为 Net::ReadTimeout 而死

我的脚本看起来像这样

正如你所看到的,我正试图从几乎所有可能发生的事情中解救出来。我似乎仍然无法让它从 Net::ReadTimeout 错误中恢复。一旦worker死了,你仍然可以看到它连接到rabbitmq,但是它从队列中取出的最后一项是未确认的,它本质上是挂起的。

0 投票
1 回答
766 浏览

ruby - 等到消息生产者收到消费者已完成工作的确认

使用 Ruby 的“bunny”RabbitMQ 客户端,我希望我的生产者(一些 Ruby 代码)向消费者(使用“sneakers”gem 的工作人员)发送一条消息,并且我希望我的生产者不执行其 Ruby 代码的另一行,直到生产者收到消费者收到我的消息并对其进行处理的确认。

在我的消费者中,我正在做一些工作,然后调用sneakers 的ack!方法来确认消息已收到并且工作已完成。

在我的生产者中,我正在调用confirm_select我的Bunny::Channel实例将其放入确认代码中,并且在publish我的消息之后,我调用wait_for_confirms通道以等待我的所有消息都被ack!消费者 -ed。(我已经尝试实现我在 bunny docs here中找到的内容。)

但是,似乎我的生产者并没有等待消费者调用ack!。我正在登录我的生产者和消费者,并发现我的生产者似乎认为消息在消费者实际确认之前已被确认。

如何让 RabbitMQ 生产者等到消费者在 Ruby 中完成工作?

Ruby 2.3.3、RabbitMQ 3.6.12、Erlang 17.3。

这是我的锁文件:

这是我的消费者/工人(consumer_worker.rb):

在一个终端选项卡中,我正在运行这个工作人员:

这是我的发布者(publisher.rb):

当我在另一个选项卡中运行以下命令时:

然后我的日志文件 ( ./ruby-debug.log) 包含以下几行:

我想要的是事件的顺序是这样的:

我该怎么做?

0 投票
1 回答
94 浏览

ruby - Bunny::NoFinalOctetError 一段时间后没有消息

使用安装了官方 docker 映像的 rabbit mq,我的工作人员在一段时间后(大约 40 秒)失败,出现异常 Bunny::NoFinalOctetError。

我的工人代码是:

我通过以下代码发送数据:

在 40 多岁之后,我的工人得到了以下输出

关于网络的更新

我嗅探了网络,因为它似乎是一个格式错误的网络数据包。实际上,错误是在收到特定数据包后触发的。

下面whireshark抓包,收到299包的时候报错。 在此处输入图像描述

但是我不知道这个数据包是什么,也不知道为什么兔子不处理它。

更新 Github 票

在这里开了一张票

0 投票
1 回答
403 浏览

rabbitmq - 从 RabbitMQ 上的 AMQP 客户端订阅 MQTT 消息?

我运行启用了 MQTT/WebMQTT 插件的 RabbitMQ 节点。所有 MQTT 插件设置都使用默认配置。各种 MQTT 客户端正在向 MQTT 通道发送消息。MQTT 通道名称遵循以下格式devices/{device_id_here}/{special_name_here}

我希望订阅在 MQTT 中匹配devices/#/logs的所有 MQTT 消息。如何在与 MQTT 用户相同的代理上使用 AMQP 客户端来完成此操作?

我使用 Bunny 作为我的 (Ruby) AMQP 客户端。

0 投票
2 回答
1309 浏览

ruby-on-rails - 用于 RabbitMQ 的 Ruby on Rails Bunny Gem

我无法弄清楚如何在本地订阅我的 RabbitMQ(当我使用 CloudAMPQ 时它起作用了。)我怀疑问题是我的 SendPriceJob 没有连接到正确的连接/通道/交换,但我不确定。

我有一个工作人员每分钟从 API 获取数据。

我有另一个工作人员打开连接并收听。

这两个工作人员由流程管理器启动。

我正在运行我的 RabbitMQ 服务器: http: //prntscr.com/i6rcwv。我成功地在连接/通道/交换上排队消息:http: //prntscr.com/i6rd7q。从我的日志看来,我正在运行的调度程序和生产者一样工作:http: //prntscr.com/i6rdxf

这是我第一次合作,message queues所以我可能做错了什么。我觉得我应该接近,因为它正在使用 CloudAMQP。唯一的区别是Bunny.new配置为连接到外部 API。

0 投票
1 回答
575 浏览

ruby - RabbitMQ/bunny:如果在线程中,则不调用订阅块

如果在线程中,我无法让队列订阅块执行。

rubybunny/exchanges中的示例按预期工作。但是,如果与线程中的消费者部分相适应,则订阅者块似乎不会执行。

我尝试了几种简单的变体,包括设置共享变量标志,但都没有成功。

我错过了什么?

代码 实际输出 预期产出
0 投票
2 回答
387 浏览

ruby - 如何将消息从未确认推送到就绪

我的问题类似于之前提出的问题,但是它没有找到答案,我有一个消费者,我想处理一个称为 Web 服务的操作,但是,如果这个 Web 服务由于某种原因没有响应,我想要消费者不处理 RabbitMQ 的消息,但我将其设置为稍后处理,我的消费者如下:

RabbitMQ 的图像,

在此处输入图像描述

语句中有某种方式:c hack(delivery_info.delivery_tag),这样可以代替删除队列的元素,以后再处理,有什么想法吗?谢谢

0 投票
1 回答
94 浏览

ruby - 使用 docker run 命令运行 ruby​​ 脚本的 amqp rabbitmq 配置

我正在尝试使用docker run命令为后端服务运行 ruby​​ 脚本。

  • 添加CMD ["./bin/ruby_code_name"]Dockerfile
  • docker run -it --name=containerName --rm testimage构建映像后运行命令。

它显示以下错误:

E, [2018-07-09T20:09:25.039697 #1] ERROR -- : [amqp] Detected TCP connection failure: Errno::ECONNREFUSED /usr/local/rvm/gems/ruby-2.1.9/gems/amqp-1.6.0/lib/amqp/session.rb:182:in `block in initialize': Could not establish TCP connection to 127.0.0.1:5672 (AMQP::TCPConnectionFailed) from /usr/local/rvm/gems/ruby-2.1.9/gems/amqp-1.6.0/lib/amqp/session.rb:796:in `call' from /usr/local/rvm/gems/ruby-2.1.9/gems/amqp-1.6.0/lib/amqp/session.rb:796:in `tcp_connection_failed' from /usr/local/rvm/gems/ruby-2.1.9/gems/amqp-1.6.0/lib/amqp/session.rb:639:in `unbind' from /usr/local/rvm/gems/ruby-2.1.9/gems/eventmachine-1.0.9/lib/eventmachine.rb:1468:in `event_callback' from /usr/local/rvm/gems/ruby-2.1.9/gems/eventmachine-1.0.9/lib/eventmachine.rb:193:in `run_machine' from /usr/local/rvm/gems/ruby-2.1.9/gems/eventmachine-1.0.9/lib/eventmachine.rb:193:in `run' from ./bin/ruby_code_name:216:in `<main>'

如何配置 amqp 或 rabbitmq 或 bunny 来运行 ruby​​ 脚本?

0 投票
2 回答
454 浏览

ruby - 优雅关闭 amqp(和/或)http 守护进程,(以及关于全局变量)

我写了一个 API 守护进程。它几乎不处理循环中的请求(在处理内部它可以通过http和amqp调用其他服务,重载sql数据库等)。我想找到为其优雅关闭的最佳方法。所以当它收到 sigterm 或中断时,它必须在完成当前请求处理后才退出。我不使用线程,但是我很困惑,有些库可以。像兔子一样。

所以这不是一个交易:

我这样想:

Ruby 解释器也说它不能从陷阱内部使用 Mutex。

所以我的问题是全局变量是此类标志的最佳解决方案,或者有类似信号量的东西,我可以从陷阱设置?

我编写的用于测试的简单脚本正在运行,但是我的真实程序有很多调试,我仍然不确定它是否可以在 prod 中运行。