ruby on rails - Can Sidekiq be performed for more than 1 task? -


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