ruby-on-rails - Sidekiq 延迟扩展没有为 *一些 * 工作生成电子邮件
问题描述
我有一个非常标准的 Rails Mailer,我正在使用Sidekiq 的 Delay Extension。我正在尝试发送大约 20,000 封电子邮件,其中大多数都可以正常工作,但大约 6000 封似乎根本不起作用。
在 Sidekiq 工作中,我遍历所有相关客户端并在每个客户端上调用延迟邮件程序:
campaign
.clients
.find_each do |client|
CampaignMailer
.delay
.step(campaign_id, step, client.email, client.first_name)
end
CampaignMailer#step
非常通用,没有提前返回声明或任何明显的东西:
class CampaignMailer < ApplicationMailer
def step(campaign_id, step_name, email, first_name)
@campaign = Campaign.find(campaign_id)
@events = @campaign.events.future
...
发送电子邮件时,生成复杂的 HTML 并通过 Postmark 发送大约需要1.5 秒
11084:2021-08-09T19:49:18.490Z 24735 TID-or8r5gewb Sidekiq::Extensions::DelayedMailer(---- !ruby/class 'CampaignMailer'- :step- - 1 - reminder_to_book - xxx@example.com - Name) JID-a3492a0743895c58de2891f7 INFO: start
11087:2021-08-09T19:49:19.988Z 24735 TID-or8r5gewb Sidekiq::Extensions::DelayedMailer(---- !ruby/class 'CampaignMailer'- :step- - 1 - reminder_to_book - xxx@example.com - Name) JID-a3492a0743895c58de2891f7 INFO: done: 1.498 sec
然而,这是另一个几乎相同的工作(只是电子邮件地址和名字不同),它在0.005 秒内运行并且没有产生电子邮件:
19247:2021-08-09T20:01:43.683Z 24735 TID-grkw8ptkj Sidekiq::Extensions::DelayedMailer(---- !ruby/class 'CampaignMailer'- :step- - 1 - reminder_to_book - yyy@example.com - Name) JID-72acbf511e6720dbec92d5bd INFO: start
19249:2021-08-09T20:01:43.688Z 24735 TID-grkw8ptkj Sidekiq::Extensions::DelayedMailer(---- !ruby/class 'CampaignMailer'- :step- - 1 - reminder_to_book - yyy@example.com - Name) JID-72acbf511e6720dbec92d5bd INFO: done: 0.005 sec
0.005 秒不足以做任何事情,甚至是数据库查找。似乎该工作在被捡起后立即被放弃。
当我稍后重新创建相同的作业时,电子邮件已成功发送。
他们正在运行“sidekiq-unique-jobs”扩展,该扩展设置为lock: :until_expired, lock_ttl: 1.hour, on_conflict: :log
. 我知道这不会被触发,因为否则我们会得到如下日志语句:
2021-08-10T21:57:06.150Z 30264 TID-oxw249we0 SidekiqUniqueJobs::Client::Middleware DIG-uniquejobs:65cfc40dcae273c14282c749d1846b71 INFO: skipping job with id (06443737f9c2306dc927a962) because unique_digest: (uniquejobs:65cfc40dcae273c14282c749d1846b71) already exists
有谁知道它可能是什么?会不会是 Redis 负载,有 20,000 多个工作?是延迟扩展里面的东西吗?
解决方案
推荐阅读
- android - 来自 dumpsys 中列出的显示的 adb screenrecord 辅助显示
- c# - 如何更新设置键的ac#字典,嵌套foreach循环中的值为空
- reactjs - React native Axios Django - Csrf failed referer checks failed no referer
- google-sheets - 如何使用查询将列数据解析为谷歌表格中的行
- html - Jquery 中内置的链接文本在 Razor 页面上不显示可点击的链接
- javascript - 如何清除其闭包函数或承诺之外的区间?
- ruby-on-rails - FactoryBot如何在多个工厂中访问相同的变量
- react-native - 找不到屏幕“用户”的“组件”、“getComponent”或“儿童”道具
- java - 我们如何在春季刷新 AnnotationconfigwebapplicationContext 之前删除/忽略对象?
- reactjs - 状态更改时未更新按钮属性