问题标签 [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.
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不支持直接回复队列的
ruby - Bunny Connection Net::ReadTimeout 的故障救援
我有一个使用 Bunny Gem 连接到 rabbitmq 实例的 ruby 脚本。该脚本工作了一段时间,但最终会因为 Net::ReadTimeout 而死
我的脚本看起来像这样
正如你所看到的,我正试图从几乎所有可能发生的事情中解救出来。我似乎仍然无法让它从 Net::ReadTimeout 错误中恢复。一旦worker死了,你仍然可以看到它连接到rabbitmq,但是它从队列中取出的最后一项是未确认的,它本质上是挂起的。
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
) 包含以下几行:
我想要的是事件的顺序是这样的:
我该怎么做?
ruby - Bunny::NoFinalOctetError 一段时间后没有消息
使用安装了官方 docker 映像的 rabbit mq,我的工作人员在一段时间后(大约 40 秒)失败,出现异常 Bunny::NoFinalOctetError。
我的工人代码是:
我通过以下代码发送数据:
在 40 多岁之后,我的工人得到了以下输出
关于网络的更新
我嗅探了网络,因为它似乎是一个格式错误的网络数据包。实际上,错误是在收到特定数据包后触发的。
但是我不知道这个数据包是什么,也不知道为什么兔子不处理它。
更新 Github 票
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 客户端。
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。
ruby - RabbitMQ/bunny:如果在线程中,则不调用订阅块
如果在线程中,我无法让队列订阅块执行。
rubybunny/exchanges中的示例按预期工作。但是,如果与线程中的消费者部分相适应,则订阅者块似乎不会执行。
我尝试了几种简单的变体,包括设置共享变量标志,但都没有成功。
我错过了什么?
代码 实际输出 预期产出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 脚本?
ruby - 优雅关闭 amqp(和/或)http 守护进程,(以及关于全局变量)
我写了一个 API 守护进程。它几乎不处理循环中的请求(在处理内部它可以通过http和amqp调用其他服务,重载sql数据库等)。我想找到为其优雅关闭的最佳方法。所以当它收到 sigterm 或中断时,它必须在完成当前请求处理后才退出。我不使用线程,但是我很困惑,有些库可以。像兔子一样。
所以这不是一个交易:
我这样想:
Ruby 解释器也说它不能从陷阱内部使用 Mutex。
所以我的问题是全局变量是此类标志的最佳解决方案,或者有类似信号量的东西,我可以从陷阱设置?
我编写的用于测试的简单脚本正在运行,但是我的真实程序有很多调试,我仍然不确定它是否可以在 prod 中运行。