Можно ли применить одну подписку к нескольким слушателям с Wisper?
У меня есть служба, которая транслирует событие, когда удовлетворяются некоторые критерии. У меня также есть несколько специальных услуг для клиентов. Я хочу, чтобы служба поддержки клиентов была уведомлена о событии. Однако я бы предпочел не добавлять подписку к службе вещания или инициализатору каждый раз, когда добавляется клиент и связанная с ним служба. Я хочу, чтобы служба вещания не знала о конкретных слушателях, чтобы нам не приходилось добавлять код в эту службу каждый раз, когда добавляется клиент. Могу ли я иметь одну подписку (либо в службе вещания, либо в инициализаторе), которая может уведомлять все службы клиентов? Это приложение Ruby/Rails, и службы поддержки клиентов не создаются - они содержат методы класса.
1 ответ
Я решил это, перебрав все классы, которые являются членами моего модуля Customer, и подписавшись на каждый из них. Это было добавлено в application.rb.
config.after_initialize do
Customer.constants.select { |c| Customer.const_get(c).is_a? Class }
.map { |klass| 'Customer::' + klass.to_s }
.each { |klass| ScanEventService.subscribe(klass.constantize) }
end
Каждый раз, когда я добавляю новую службу поддержки клиентов, я делаю ее участником этого модуля.