问题标签 [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.
ruby - RabbitMQ 不断堆叠未确认的消息,尽管它们被拒绝或确认
我下面的 Ruby 代码处理 RabbitMQ 事件。我正在为 Ruby 和运动鞋 gem使用 Bunny 。尽管我认为我正在对所有可能的事件采取行动,但本地频道中充斥着未确认的消息。每次日志显示如下内容时都会发生这种情况:
这是我的 Ruby 代码:
我的reject!
大概有什么问题?有点卡住了几个小时。我试图改变所有reject!
,ack!
但似乎没有任何帮助。
也许我使用rescue
了错误的方式?
ruby-on-rails - RabbitMQ 不使用循环向消费者发送消息
我有一个充当生产者的 Ruby 应用程序,如下所示:
我还有一个消费者应用程序,它产生 2 个工人(消费者)
它工作得很好,但我两次收到相同的消息(在两个消费者身上)。我认为默认情况下,rabbitmq 会使用循环方式将消息发送给消费者,但即使使用预取选项,我也会收到 2 条消息。
我错过了什么吗?
ruby-on-rails - RabbitMQ/Sneakers - 一次将特定队列限制为一个工作人员?
我有一个使用 RabbitMQ 和 Sneakers gem 的用例,我有多个 Worker 运行以响应我项目中的几十个队列。因此,工作人员很可能同时处理来自同一个队列的消息。
但是,特别是对于一个队列 - 让我们称之为:one_at_a_time
- 我只希望一个工作人员能够在任何给定时间处理来自队列的消息。
我想这样做的原因是因为工作人员旨在执行以下操作:
- 通过传入的 ID 查找 AR 对象
- 检查是否设置了一个属性——比如 :worked。
- 如果
true
,则ack!
消息。 - 如果
false
,向用户发送电子邮件,则设置:worked
为 true。
- 如果
这样做是为了防止我不小心向用户发送两次电子邮件,以防两个消息以相同的对象 ID 快速连续创建。如果在任何给定时间只有一个工作人员听过这个队列,这个设计就可以正常工作,因为第一次运行将经过步骤 1 -> 2 -> 2,然后下一次运行将经过步骤 1 -> 2 -> 1 并且不会向用户发送电子邮件。但在测试中,我发现有可能出现竞争条件,即两个工作人员会:one_at_a_time
同时从队列中拉出一条消息,通过:worked
设置的检查,然后都发送一封电子邮件。
所以考虑到这一切,有没有办法可以限制收听队列的工人数量?谢谢你。
ruby-on-rails-4 - ActionMailer、Sneakers、deliver_later 函数
我有下一个代码:
rabbitmq-server 已安装并启动。当我运行 'send_my_mail' 函数时,我在 Rails 控制台消息中收到:
但是当我使用终端命令运行 ActiveJob 工作者时:
什么都没发生。看起来具有正确类名的邮件侦听器未启动,因此未发送信件。在 Rabbitmq UI 跟踪器中,我看到了消息事件的记录:
'deliver_later' Active Job 和 Sneakers 的正确工人名称是什么?谢谢你。
ruby-on-rails - 如何使用带有计数的 Sneakers gem 在 RabbitMQ 中重新排队消息
现在我在两个不同的队列中发布两条消息,它们相互依赖的问题,我必须确保我在队列 2 的消息之前从队列 1 获取消息,所以我决定如果 queue1 所需的数据尚不存在,则重新排队 queue2 消息,如果没有最大重新排队时间(例如 3 次),我将拒绝它。
现在我在跟踪重新排队计数时遇到问题,我已经阅读了使用尝试数编辑标题然后将其发送回队列,但我不认为重新排队!方法接受任何参数,所以它只是重新排列相同的旧消息,所以任何人都可以帮助我吗?
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 进程时,就不会出现这个问题。
我的问题:有没有办法克服这个不正确的数据问题?
ruby-on-rails - 在heroku上部署运动鞋,退出状态为0
尝试在 heroku 上部署运动鞋,而我在 Procfile 中创建了一个工人:
sneakers: bundle exec rake sneakers:run
这是我的 senakers.rb 文件
它总是以状态 0 退出,有什么办法让它继续工作吗?
这是日志
ruby-on-rails - rabbitMQ 和运动鞋的配置问题
我有两个应用程序 sap1 和 sap2,我一直在使用 rabbitMQ(bunny gem)进行消息传递,所以就像从 sap1 开始一样,我将创建消息并发布
sap1(发布者应用)
宝石文件
发布.rb
sap2(消费者应用程序)
宝石文件
配置/初始化程序/sneakers.rb
耙文件
应用程序/工人/mac_worker.rb
并在控制台中听这样做
这是可行的,有时我也会遇到连接问题,在消费者应用程序中我不想使用运动鞋 gem 所以我想用兔子从队列中读取消息并将其放入 sidekiq,以及如何在 sidekiq 中自动收听?
ruby-on-rails - RabbitMQ + Sneakers:一个工人还是 100 个?
假设我需要为 100 个用户进行复杂的计算。我当前的配置如下所示:
制片人
MassComplexCalculations 工作者
运行工人
我不太了解 AMQP 如何分配资源来执行任务以及如何提供帮助。对吗,在单独的工作人员中运行每个计算会更好吗?例如:
更改 MassComplexCalculations 工作者
新的 PersonalComplexCalculations 工作者
据我了解,可能有两种选择:
- 第一个实现可能会运行得更慢,因为它会按顺序为每个用户调用服务,而在第二个选项中,我们将有 100 个同时工作的工作人员,他们将并行工作
- 没有区别
那么哪种方法更好呢?或者甚至其中一个是完全错误的?
提前致谢。