Publishing Messages
Publishing messages to a Redis queue involves creating a pipe (queue), a message, and an envelope to wrap them together.
Basic Publishing
<?php
use ByJG\MessageQueueClient\ConnectorFactory;
use ByJG\MessageQueueClient\Connector\Pipe;
use ByJG\MessageQueueClient\Message;
use ByJG\MessageQueueClient\Envelope;
use ByJG\MessageQueueClient\RedisQueue\RedisQueueConnector;
use ByJG\Util\Uri;
// Register and create connector
ConnectorFactory::registerConnector(RedisQueueConnector::class);
$connector = ConnectorFactory::create(new Uri("redis://localhost:6379"));
// Create a queue (pipe)
$pipe = new Pipe("test");
// Create a message
$message = new Message("Hello World");
// Publish the message
$connector->publish(new Envelope($pipe, $message));
Creating a Pipe
A pipe represents a queue in Redis. Create it with a queue name:
$pipe = new Pipe("my-queue-name");
Pipe with Dead Letter Queue
You can configure a dead letter queue (DLQ) to handle failed messages:
$pipe = new Pipe("test");
$pipe->withDeadLetter(new Pipe("dlq_test"));
When a message is not acknowledged (NACK), it will be sent to the dead letter queue.
Creating a Message
Messages are created with a body (string content):
// Simple text message
$message = new Message("Hello World");
// JSON message
$message = new Message(json_encode(['key' => 'value']));
// Any string content
$message = new Message("Any text content here");
Message Properties
Messages support additional properties:
$message = new Message("Hello");
$properties = $message->getProperties();
// Default content_type is 'text/plain'
Publishing Messages
Wrap the pipe and message in an Envelope and publish:
$envelope = new Envelope($pipe, $message);
$connector->publish($envelope);
How It Works
When you publish a message:
- The connector uses Redis
LPUSHto add the message to the left side of the list - The message body is stored as a plain string (no serialization)
- The content type defaults to
text/plainif not specified - Consumers will retrieve messages from the right side using
BRPOP