Message Publisher provide abstraction to send Message to other Services.
This way you can send message with simple interface without exposing Message Broker implementation and keeping possibility to easily switch implementation when needed.
interface MessagePublisher
{
// 1
public function send(string $data, string $sourceMediaType = MediaType::TEXT_PLAIN) : void;
// 2
public function sendWithMetadata(string $data, array $metadata, string $sourceMediaType = MediaType::TEXT_PLAIN) : void;
// 3
public function convertAndSend(object|array $data) : void;
// 4
public function convertAndSendWithMetadata(object|array $data, array $metadata) : void;
}
send
- Send astring type
via Publisher. It does not need any conversion, you may add additionalMedia Type
of$data
.sendWithMetadata
- Does the same assend,
allows for sending additional Meta data.convertAndSend
- Allow for sending types, which needs conversion. Allow for sending objects and array,Ecotone
make use of Conversion system to convert$data
.convertAndSendWithMetadata
- Does the same asconvertAndSend,
allow for sending additional Meta data.
Publisher is a special type of Gateway, which implements Publisher interface.
It will be available in your Dependency Container under passed Reference name.
In case interface name MessagePublisher:class
is used, it will be available using auto-wire.
#[EventHandler]
public function whenOrderWasPlaced(OrderWasPlaced $event, MessagePublisher $publisher) : void
{
$publisher->convertAndSendWithMetadata(
$event,
[
"system.executor" => "Johny"
]
);
}