Sending Webhooks with Exponential Backoff Discussion
Hi,
love the episode!
Just a tiny remark; when running this code;
def send_create_webhook!
User.has_webhook_enabled.find_each do |user|
SendWebhookJob.perform_later(user.webhook_url, {
type: "tweet.created",
id: id,
body: body,
user: {
id: user_id,
name: user.name,
}
})
end
end
Wouldn't that be sending the wrong user.name
? You pass in the user
that wants to receive the webhook and in the body, you refer to that webhook user
, instead of the user that created the tweet.
I think refering to self.user.name
would fix that.
Sidekiq has an automatic job retry with exponential backoff:
https://github.com/mperham/sidekiq/wiki/Error-Handling#automatic-job-retry
Why didn't you use that?
I make a change to use Sidekiq retry
class SendWebhookJob < ApplicationJob
WebhookNotFound = Class.new(StandardError)
retry_on WebhookNotFound
queue_as :default
MAX_RETRIES = 10
def perform(webhook_url, data)
puts "#{Time.zone.now} : Sending data to #{webhook_url}"
response = HTTP.post(webhook_url, json: data)
successful = response.code == 200 || raise(WebhookNotFound)
end
end