https://github.com/byjg/php-message-queue-client
https://github.com/byjg/php-message-queue-client
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/byjg/php-message-queue-client
- Owner: byjg
- License: mit
- Created: 2023-05-03T20:08:32.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-12T23:45:23.000Z (about 1 year ago)
- Last Synced: 2024-10-19T03:03:24.073Z (12 months ago)
- Language: PHP
- Size: 56.6 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Messaging Client
[](https://github.com/byjg/php-message-queue-client/actions/workflows/phpunit.yml)
[](http://opensource.byjg.com)
[](https://github.com/byjg/php-message-queue-client/)
[](https://opensource.byjg.com/opensource/licensing.html)
[](https://github.com/byjg/php-message-queue-client/releases/)This is a simple client to publish and consumes messages from a Message Queue server.
## Features
* Low code to publish and consume messages
* Messages, Queues and Connector objects are decoupled
* Easy to implement new connectors```text
┌─────────────────┐ ┌────────────────────────┐
│ │ │ Envelope │
│ │ │ │
│ │ │ │
│ │ │ ┌─────────────────┐ │
│ │ publish() │ │ Pipe │ │
│ ├─────────────────▶│ └─────────────────┘ │
│ │ │ ┌─────────────────┐ │
│ │ │ │ Message │ │
│ │ │ └─────────────────┘ │
│ │ │ │
│ │ └────────────────────────┘
│ Connector │
│ │
│ │
│ │ consume() ┌─────────────────┐
│ │◀────────────────────│ Pipe │
│ │ └─────────────────┘
│ │
│ │
│ │
└─────────────────┘
```## Implemented Connectors
| Connector | URL / Documentation | Composer Package |
|-----------|------------------------------------------------------------------------------------------|-------------------------|
| Mock | [docs/mock-connector.md](docs/mock-connector.md) | - |
| RabbitMQ | [https://github.com/byjg/rabbitmq-client](https://github.com/byjg/rabbitmq-client) | byjg/rabbitmq-client |
| Redis | [https://github.com/byjg/redis-queue-client](https://github.com/byjg/redis-queue-client) | byjg/redis-queue-client |## Usage
### Publish
```php
withDeadLetter(new Pipe("dlq_test"));// Create a message
$message = new Message("Hello World");// Publish the message into the queue
$connector->publish(new Envelope($pipe, $message));
```### Consume
```php
withDeadLetter(new Pipe("dlq_test"));// Connect to the queue and wait to consume the message
$connector->consume(
$pipe, // Queue name
function (Envelope $envelope) { // Callback function to process the message
echo "Process the message";
echo $envelope->getMessage()->getBody();
return Message::ACK;
},
function (Envelope $envelope, $ex) { // Callback function to process the failed message
echo "Process the failed message";
echo $ex->getMessage();
return Message::REQUEUE;
}
);
```The consume method will wait for a message and call the callback function to process the message.
If there is no message in the queue, the method will wait until a message arrives.If you want to exit the consume method, just return `Message::ACK | Message::EXIT` from the callback function.
Possible return values from the callback function:
* `Message::ACK` - Acknowledge the message and remove from the queue
* `Message::NACK` - Not acknowledge the message and remove from the queue. If the queue has a dead letter queue, the message will be sent to the dead letter queue.
* `Message::REQUEUE` - Requeue the message
* `Message::EXIT` - Exit the consume method## Consumer Client
You can simplify the consume method by using the ConsumerClientTrait. See more details in the [docs/consumer-client-trait.md](docs/consumer-client-trait.md).
## Connectors
The connectors are the classes responsible to connect to the message queue server and send/receive messages.
All connector have the following interface:
```php
byjg/uri
```----
[Open source ByJG](http://opensource.byjg.com)