Shipmate offers a Composer package that you can use within your PHP codebase to interact with your message queue.
To install the package via Composer, run the following command in your terminal:
composer require shipmate-io/shipmate
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);
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}.");