Final Class Yiisoft\Queue\Message\Serializer\MessageSerializer
| Inheritance | Yiisoft\ |
|---|---|
| Implements | Yiisoft\ |
Serializes and unserializes queue messages, resolving the message class via a {@see MessageClassResolverInterface}.
When serializing, assembles an array with type, payload, and meta keys and passes it as a single array to
{@see \
Public Methods
Method Details
| public mixed __construct ( Yiisoft\ | ||
| $encoder | Yiisoft\ |
Encoder used to encode and decode message data. |
| $classResolver | Yiisoft\ |
Resolver for message classes, or a map of type to class. |
public function __construct(
private readonly MessageEncoderInterface $encoder,
MessageClassResolverInterface|array $classResolver = [],
) {
$this->resolver = is_array($classResolver)
? new ArrayMessageClassResolver($classResolver)
: $classResolver;
}
| public string serialize ( Yiisoft\ | ||
| $message | Yiisoft\ |
|
public function serialize(MessageInterface $message): string
{
return $this->encoder->encode([
'type' => $message->getType(),
'payload' => $message->getPayload(),
'meta' => $message->getMeta(),
]);
}
| public Yiisoft\ | ||
| $value | string | |
public function unserialize(string $value): MessageInterface
{
$data = $this->encoder->decode($value);
if (!is_array($data)) {
throw new MessageSerializerException('Decoded data must be array. Got ' . get_debug_type($data) . '.');
}
$type = $data['type'] ?? null;
if (!isset($type) || !is_string($type)) {
throw new MessageSerializerException('Message type must be a string. Got ' . get_debug_type($type) . '.');
}
$meta = $data['meta'] ?? [];
if (!is_array($meta)) {
throw new MessageSerializerException('Metadata must be an array. Got ' . get_debug_type($meta) . '.');
}
/** @psalm-var MessageMeta $meta */
$class = $this->resolver->resolve($type) ?? GenericMessage::class;
/** @psalm-var MessagePayload $payload */
$payload = $data['payload'] ?? null;
return $class::fromPayload($type, $payload)->withMeta($meta);
}
User Contributed Notes
Leave a comment
Join the conversation to share a note.