问题标签 [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.
rabbitmq - 如何从 RabbitMQ 获取旧消息?
我正在使用 Bunny (Ruby) 发布 RabbitMQ 消息,如下所示:
并像这样订阅:
一旦我启动订阅者,它会立即接收发送的任何消息。但是,如果我在未启动订阅者的情况下发送消息,则在我启动订阅者时不会收到消息(无论发送者是否仍在推送消息)。
当没有订阅者收听时,是否可以通过队列返回并接收过去发送的消息?
ruby - 使用 bunny fetch 从 RabbitMQ 加载多条消息
我正在为 RabbitMQ 构建一个 Ruby 工作者,它将每次处理多条消息,并将在多个队列上工作。在 RabbitMQ 中,我有:Queue1、Queue2、Queue3 ...
我需要快速加载大包数据包(使用 basic_get 我可以加载 65535 条消息而无需询问)。下面的代码运行良好,直到我们转移到新服务器。队列和工作人员之间的延迟上升,我每秒只能加载 50 条基本 get 消息。
这是我的工作流程:
在 QueueManager.rb 我有
我发现的另一个解决方法是使用订阅方法。但我还没有找到打破内循环订阅的方法。
我用谷歌搜索,发现这对我有用:
- 但是在主线程中会发生什么?
- 如何正确阻塞主线程,并在处理完成时解除阻塞?
- 还有其他方法可以从队列中加载多条消息,处理它们,关闭消费者并移动到下一个队列吗?
ruby - Bunny::AccessRefused 消息在尝试阅读消息时
我正在尝试使用 Bunny 从队列中读取消息。我在 RabbitMQ 服务器上只有读取权限,但似乎我正在使用的代码试图创建队列 - 尽管我可以看到队列已经存在queue_exists?()
。
Bunny 中必须有一个进程可以简单地从现有队列中读取消息?这是我正在使用的代码
当我执行上述操作时,我收到:
ruby-on-rails - RabbitMQ 3.5.6 无法建立到任何已配置主机的 TCP 连接 (Bunny::TCPConnectionFailedForAllHosts)
我正在尝试连接到 RabbitMQ 服务器,但总是出现以下错误:
和
我在 MAC OS 上使用 Ruby 2.1.2、RabbitMQ 3.5.6。对不起,我是 RabbitMQ 的新手,只是想使用它,但无法处理这个问题。请给我一些建议。
ruby-on-rails - 如何在rails中定义一个可以在Delayed Job中访问的全局变量?
这是我的 config/initializers/bunny.rb 文件:
如您所见,我将 SmsHandle 声明为全局变量,以便在任何地方使用它。
工人代码:
但是,对我来说,这里的问题是我无法在延迟作业中调用的任何方法中使用它。
那么,我怎样才能让delayed_job 使用这个特定的变量。
我应该在 config/initializer/delayed_job.rb 中声明这样的变量吗?即使这似乎也不起作用。有人可以指出这样做的正确方法吗?
ruby - Rabbitmq RPC 实现共享同一个回复队列
我正在尝试使用 rabbitmq 构建 RPC。
根据通过rabbitmq构建RPC的教程http://www.rabbitmq.com/tutorials/tutorial-six-ruby.html,我们可以为每个客户端使用一个reply-queue,并使用correlation_id来映射响应和请求。我对如何使用correlation_id 感到困惑?
这是我正在运行的问题,我想从一个客户端同步创建两个 rpc 调用,使用具有两个不同相关 id 的相同回复队列。但是我不知道这是否是正确的用例,因为从我在教程中阅读的内容来看,它似乎假设每个客户端都在按顺序进行 rpc 调用。(在这种情况下,我们为什么需要correlation_id在这里变得更加混乱)。
这是我想要实现的代码示例(rpc_server.rb 将与教程相同)。希望它能让我的问题更清楚。
下面的代码块不起作用,因为当我们在 thr1 中设置时,correlation_id 被 thr2 覆盖。
我想知道是否有任何修改它,使其工作?如果我们尝试将@reply_queue.subscribe 块移出初始化并传入不同的call_id,它仍然不起作用,因为看起来@reply-queue 在等待thr1 完成时将被锁定。
如果问题不清楚,请告诉我,提前感谢您的任何回复。
ruby - 使用兔子宝石,我如何阻止直到收到消息或超时到期
我正在使用bunny ruby gem向 rabbitmq 服务器发送和接收消息。如何在等待多长时间超时的同时从队列中同步弹出消息(即,如果 3 秒后没有消息到达,则停止阻塞)?
一个明显的解决方案是只循环 pop 调用,直到超时过期或收到消息,但这似乎非常低效。有没有更优雅的解决方案?我查看了 bunny 的文档以及 rabbitmq 网站上的教程,但我没有找到针对这种特定场景的解决方案。
rspec - 使用 Bunny Gem 和 RabbitMQ 进行集成测试
我在一个项目中使用带有 RabbitMQ 的 Bunny Gem,以便多个应用程序可以进行 RPC 调用。我正在努力寻找一种方法来对这些调用进行集成测试。当然,我可以模拟、对象和存根一个方法来返回一些假数据,但是如果有像带有 RabbitMQ 的 VCR gem 这样的东西肯定会很好。关于如何最好地测试兔子的任何指导?
multithreading - 当连接和通道仍然打开时,消费者停止从 RabbitMQ 代理接收消息
我在其他线程上看到过类似的问题,但没有一个给出确凿的答案。
我将启动大约 4 个消费者(使用 Bunny 客户端 gem 用 Ruby 编写)来订阅同一个队列并处理消息,并且在消耗大约 20,000-40,000 条消息之前一切正常。然后消费者只是停止接收消息。连接/通道保持打开状态,服务器仍然可以识别消费者,但他们只是没有收到消息。
我不认为这是类似线程中建议的预取问题。我已经在各个级别设置了预取,它并没有解决问题。问题不在于单个消费者在其他消费者之前获取所有消息 - 而是所有消费者都停止了。
我正在使用托管的 RabbitMQ 服务 CloudAMQP,所以我认为这可能是那里的性能问题,但是发布消息仍然可以正常工作,并且无论我选择的实例大小如何,我都会遇到同样的问题。日志中没有什么奇怪的。
我应该补充一点,我正在使用以下命令明确确认消息:ch.acknowledge(delivery_info.delivery_tag, false)。
我在这里有点难过,非常感谢您的帮助。如果我遗漏了任何重要的细节,请告诉我。
一些示例代码:
ruby - 获取队列而不提供其所有属性
我正在尝试为现有队列编写消费者。
RabbbitMQ 在一个单独的实例中运行,名为“org-queue”的队列已经创建并绑定到一个交换器。org-queue 是一个持久队列,它还有一些额外的属性。
现在我需要从这个队列接收消息。我已经使用下面的代码来获取队列的实例
它给我一个错误,说明不同的耐用属性。默认情况下,兔子似乎使用耐用 = 假。所以我添加了耐用的真实作为参数。现在它说明了其他参数之间的差异。我是否需要指定所有参数才能连接到它?由于rabbitMQ由不同的环境维护,我很难获得所有属性。
有没有办法获取队列列表并在客户端侦听所需的队列,而不是通过所有参数连接到队列。