问题标签 [sneakers]

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 回答
275 浏览

ruby - RabbitMQ 不断堆叠未确认的消息,尽管它们被拒绝或确认

我下面的 Ruby 代码处理 RabbitMQ 事件。我正在为 Ruby 和运动鞋 gem使用 Bunny 。尽管我认为我正在对所有可能的事件采取行动,但本地频道中充斥着未确认的消息。每次日志显示如下内容时都会发生这种情况:

这是我的 Ruby 代码:

我的reject!大概有什么问题?有点卡住了几个小时。我试图改变所有reject!ack!但似乎没有任何帮助。

也许我使用rescue了错误的方式?

0 投票
0 回答
595 浏览

ruby-on-rails - RabbitMQ 不使用循环向消费者发送消息

我有一个充当生产者的 Ruby 应用程序,如下所示:

我还有一个消费者应用程序,它产生 2 个工人(消费者)

它工作得很好,但我两次收到相同的消息(在两个消费者身上)。我认为默认情况下,rabbitmq 会使用循环方式将消息发送给消费者,但即使使用预取选项,我也会收到 2 条消息。

我错过了什么吗?

0 投票
1 回答
1101 浏览

ruby-on-rails - RabbitMQ/Sneakers - 一次将特定队列限制为一个工作人员?

我有一个使用 RabbitMQ 和 Sneakers gem 的用例,我有多个 Worker 运行以响应我项目中的几十个队列。因此,工作人员很可能同时处理来自同一个队列的消息。

但是,特别是对于一个队列 - 让我们称之为:one_at_a_time- 我只希望一个工作人员能够在任何给定时间处理来自队列的消息。

我想这样做的原因是因为工作人员旨在执行以下操作:

  1. 通过传入的 ID 查找 AR 对象
  2. 检查是否设置了一个属性——比如 :worked。
    1. 如果true,则ack!消息。
    2. 如果false,向用户发送电子邮件,则设置:worked为 true。

这样做是为了防止我不小心向用户发送两次电子邮件,以防两个消息以相同的对象 ID 快速连续创建。如果在任何给定时间只有一个工作人员听过这个队列,这个设计就可以正常工作,因为第一次运行将经过步骤 1 -> 2 -> 2,然后下一次运行将经过步骤 1 -> 2 -> 1 并且不会向用户发送电子邮件。但在测试中,我发现有可能出现竞争条件,即两个工作人员会:one_at_a_time同时从队列中拉出一条消息,通过:worked设置的检查,然后都发送一封电子邮件。

所以考虑到这一切,有没有办法可以限制收听队列的工人数量?谢谢你。

0 投票
1 回答
669 浏览

ruby-on-rails-4 - ActionMailer、Sneakers、deliver_later 函数

我有下一个代码:

rabbitmq-server 已安装并启动。当我运行 'send_my_mail' 函数时,我在 Rails 控制台消息中收到:

但是当我使用终端命令运行 ActiveJob 工作者时:

什么都没发生。看起来具有正确类名的邮件侦听器未启动,因此未发送信件。在 Rabbitmq UI 跟踪器中,我看到了消息事件的记录:

'deliver_later' Active Job 和 Sneakers 的正确工人名称是什么?谢谢你。

0 投票
0 回答
372 浏览

ruby-on-rails - 如何使用带有计数的 Sneakers gem 在 RabbitMQ 中重新排队消息

现在我在两个不同的队列中发布两条消息,它们相互依赖的问题,我必须确保我在队列 2 的消息之前从队列 1 获取消息,所以我决定如果 queue1 所需的数据尚不存在,则重新排队 queue2 消息,如果没有最大重新排队时间(例如 3 次),我将拒绝它。

现在我在跟踪重新排队计数时遇到问题,我已经阅读了使用尝试数编辑标题然后将其发送回队列,但我不认为重新排队!方法接受任何参数,所以它只是重新排列相同的旧消息,所以任何人都可以帮助我吗?

0 投票
0 回答
83 浏览

ruby-on-rails - 运动鞋并行处理

我有两个应用程序 App 1 和 App 2。两者都是 Rails 应用程序。应用程序 1 从用户那里收集数据,这些收集的数据需要同步到应用程序 2。我使用 RabbitMQ 和 Sneakers(有 5 个工作进程)进行应用程序之间的同步过程。每当 App 1 中有一些更新时,一个作业就会排队到 RabbitMQ 服务器。从那里,Sneakers 处理这些作业并将数据存储在 App 2 数据库中。

用于在两个应用程序中存储数据的架构如下。

应用程序 1

作者有很多书。

作者表:

书表:

应用程序 2

作者表:

这里 original_id 列是 App 1 的作者记录 ID,books 列是包含作者所有书籍信息的哈希。

我在这里面临的问题是,只要多个用户同时对同一作者的书籍进行多次更新(创建或更新),就会有多个作业排队到 RabbitMQ 服务器。在 App 2 中,Sneakers 并行处理这些作业(一次 5 个作业,因为在 App 2 中运行了 5 个 Sneakers 进程)。每个运动鞋流程都需要不同的时间来提交。所以最后,App 2 中出现了错误的数据。

但是当只有一个 Sneakers 进程时,就不会出现这个问题。

我的问题:有没有办法克服这个不正确的数据问题?

0 投票
0 回答
74 浏览

ruby-on-rails - 一次性工作的红宝石发条?

我正在考虑使用运动鞋作为我的 ActiveJob 后端。不幸的是,它不支持延迟消息。但既然我们无论如何都要使用发条:是否有任何机制来安排一次性工作clockwork?我假设它必须基于数据库支持的作业功能,因为延迟的作业必须在应用程序重新启动后幸存下来。

0 投票
1 回答
308 浏览

ruby-on-rails - 在heroku上部署运动鞋,退出状态为0

尝试在 heroku 上部署运动鞋,而我在 Procfile 中创建了一个工人:

sneakers: bundle exec rake sneakers:run

这是我的 senakers.rb 文件

它总是以状态 0 退出,有什么办法让它继续工作吗?

这是日志

0 投票
0 回答
1274 浏览

ruby-on-rails - rabbitMQ 和运动鞋的配置问题

我有两个应用程序 sap1 和 sap2,我一直在使用 rabbitMQ(bunny gem)进行消息传递,所以就像从 sap1 开始一样,我将创建消息并发布

sap1(发布者应用)

宝石文件

发布.rb

sap2(消费者应用程序)

宝石文件

配置/初始化程序/sneakers.rb

耙文件

应用程序/工人/mac_worker.rb

并在控制台中听这样做

这是可行的,有时我也会遇到连接问题,在消费者应用程序中我不想使用运动鞋 gem 所以我想用兔子从队列中读取消息并将其放入 sidekiq,以及如何在 sidekiq 中自动收听?

0 投票
1 回答
547 浏览

ruby-on-rails - RabbitMQ + Sneakers:一个工人还是 100 个?

假设我需要为 100 个用户进行复杂的计算。我当前的配置如下所示:

制片人

MassComplexCalculations 工作者

运行工人

我不太了解 AMQP 如何分配资源来执行任务以及如何提供帮助。对吗,在单独的工作人员中运行每个计算会更好吗?例如:

更改 MassComplexCalculations 工作者

新的 PersonalComplexCalculations 工作者

据我了解,可能有两种选择:

  1. 第一个实现可能会运行得更慢,因为它会按顺序为每个用户调用服务,而在第二个选项中,我们将有 100 个同时工作的工作人员,他们将并行工作
  2. 没有区别

那么哪种方法更好呢?或者甚至其中一个是完全错误的?

提前致谢。