publishers[] = $publisher; } } public function canPublish(Message $message): bool { return true; } public function publish(Message $message): bool { try { $allPublished = true; foreach ($this->publishers as $publisher) { if ($publisher->canPublish($message)) { $allPublished &= $publisher->publish($message); } } return (bool) $allPublished; } catch (\Exception $e) { throw new FailureWhenPublishingMessage($e); } } }