Created
May 8, 2024 17:42
-
-
Save sandeshbodake/04b45555c480ad62c7bfdba53e5a547a to your computer and use it in GitHub Desktop.
Revisions
-
sandeshbodake created this gist
May 8, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,62 @@ class UpsApiWorker include Sidekiq::Job sidekiq_options retry: 3 # Retry the job up to 3 times (adjust as needed) def perform(zipcode, batch) batch.jobs do UPS_API_LIMIT.within_limit do UpsApiService.fetch(zipcode) end end end def success send_notification end end private def process_zipcode(zipcode) # Your job processing logic here Sidekiq.logger.info "Processed zipcode #{zipcode}" end end class UpsApiService def client end def fetch end end # Main entry point to enqueue jobs using Sidekiq::Batch class JobProcessor include Sidekiq::Job def self.process(zipcodes) Sidekiq::Batch.new.on(:success, UpsApiWorker, 'zipcodes' => runner).jobs do |batch| zipcodes.each do |zipcode| UpsApiWorker.perform_async(zipcode, batch.bid) end end end end # Usage example: JobProcessor.process(zipcodes) ### config for rate limiting # 10 requests for 100 seconds UPS_API_LIMIT = Sidekiq::Limiter.window('ups_api_limiter', 10, 100) Sidekiq::Limiter.configure do |cofig| config.errors << UpsApi::Error::TooManyRequests end Sidekiq.configure_server do |config| config.periodic do |mgr| mgr.register('0 0 * * FRI', JobProcessor) end end