we have used sidekiq inserting records our table asynchronously , check production sidekiq dashboard monitor no. of processed, queued, retry, busy inserting records.
and have got new requirement delete records (say users tables : delete expired users) asynchronously. need monitor sidekiq dashboard processes, queued, retry often.
for insert records use :
in user controller:
def create_user createuserworker.perform_async(@client_info, @input_params) end in lib/workers/createuser_worker.rb
class createuserworker include sidekiq::worker def perform(client_info, input_params) begin @client_info = client_info @user = user.new(@client_info) @user.create(input_params) rescue raise end end end if same delete users asynchronously using sidekiq, how can differentiate inserted process deleted process without messup?
first, if want check error creating in begin-rescue block, should use create! method. not create method.
create method not raise error.
check here
destroy method same create method.
use destroy method ! (destroy!)
of course, should add new worker destroy user.
because perform method should exists 1.
if not want add new worker, try pattern below!
userworker def perform(~, flag) #flag meaning create or destroy is_success = false # result of creating or destroying # create or destroy # .. # .. logmodel.create({}) # user info is_success , flag end ebd p.s
think create() next new() awkward(?).
recommend
@user = user.create(client_info) or
@user = user.new(client_info) @user.save! (bang meaning same above) and no need begin-rescue block. use create, destroy method bang.
def perform(client_info, input_params) user.create!(client_info) # if failed raise error end ++added comments
i think if have many user deleted or destroyed, pass user_ids (or user_infos) array worker perform method , in perform method, loop creating or destroying (if there failed record created or destroyed, create log file or log model entry failed record).
if user_id must created or destroyed @ once, use transaction block.
def perform(params) begin activerecord::base.transaction # loop create or destroy end rescue end end if not, loop
def perform(params) #loop if create or destroy method (without bang) #success else #failed end end xworker.perform_async() method maybe called admin page(?).
Comments
Post a Comment