require 'method_object' module Messaging module Adapters class Postgres class CreateLock include MethodObject option :key option :connection, default: -> { SerializedMessage.connection } def call connection.execute "SELECT pg_advisory_lock(#{lock_key});" rescue ActiveRecord::QueryCanceled => e Messaging.logger.debug "Locking failed, retrying in 5 seconds" sleep 5 retry end private def lock_key Zlib.crc32(key) end end end end end