Cloud service

Using a message queue in PHP

Shipmate offers a Composer package that you can use within your PHP codebase to interact with your message queue.

Installing the Composer package

To install the package via Composer, run the following command in your terminal:

composer require shipmate-io/shipmate

Publishing messages

To publish a message to the message queue, add the following snippet to your codebase:

use Shipmate\Shipmate\MessageQueue\MessageQueue;
use Shipmate\Shipmate\MessageQueue\Message;

$messageQueue = new MessageQueue(
    name: getenv('SHIPMATE_MESSAGE_QUEUE_NAME'),
);

$message = new Message(
    type: 'user.created',
    payload: [
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
);

$messageQueue->publishMessage($message);

Receiving messages

To receive messages published by other services to the message queue, you must add two HTTP endpoints to your service. By default, the paths of these endpoints should be:

  • POST /shipmate/handle-message
  • POST /shipmate/handle-failed-message

However, the paths of these endpoints can be customized in your application blueprint, as described in the section Creating a message queue.

How you implement these endpoints highly depends on the PHP framework you are using. But the general idea of how you can handle a message in your PHP code is illustrated in the following snippets.

Handle a message:

use Shipmate\Shipmate\MessageQueue\MessageQueue;

$requestBody = $httpRequest->getBody();

$message = MessageQueue::parseMessage($requestBody);

if ($message->type === 'user.created') {
    SendWelcomeMail::new()->execute(
        firstName: $message->payload['first_name'],
        lastName: $message->payload['last_name'],
    );
}

Handle a failed message:

use Shipmate\Shipmate\MessageQueue\MessageQueue;

$requestBody = $httpRequest->getBody();

$message = MessageQueue::parseMessage($requestBody);

log("Failed to handle message of type {$message->type}.");