https://github.com/codibly/queuesbundle
Bundle with utilities of queues dealing based on BernardBundle
https://github.com/codibly/queuesbundle
Last synced: about 1 year ago
JSON representation
Bundle with utilities of queues dealing based on BernardBundle
- Host: GitHub
- URL: https://github.com/codibly/queuesbundle
- Owner: codibly
- Created: 2017-07-10T11:38:29.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-14T09:39:59.000Z (almost 9 years ago)
- Last Synced: 2025-04-10T00:46:14.682Z (about 1 year ago)
- Language: PHP
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# QueuesBundle
Bundle with utilities of queues dealing based on BernardBundle
Installation
1. Add to your composer.json
``` json
"require": {
(...)
"codibly/queues-bundle": "dev-master"
}
"repositories": [
(...)
{
"type": "vcs",
"url": "https://github.com/codibly/QueuesBundle"
}
]
```
2. Create main abstract Message entity extening Codibly\QueuesBundle\Message\MessageEntityAbstract, for example:
```php
clientName;
}
/**
* @param string $clientName
* @return $this
*/
public function setClientName(string $clientName)
{
$this->clientName = $clientName;
return $this;
}
/**
* @return array
*/
protected function getRequiredProperties(): array
{
$parentRequired = parent::getRequiredProperties();
$currentRequired = ['clientName'];
return array_merge($parentRequired, $currentRequired);
}
}
```
4. Add to your services.yml definition for MessageFactory service, completing calls section for add message binding:
```yaml
codibly_queues.message_factory:
class: Codibly\QueuesBundle\MessageFactory
arguments: ['@monolog.logger', '@codibly_queues.hash_generator.sha_hash']
calls:
- ['addInternalMessageBinding', ['deployQueue', 'ExampleBundle\Entity\Message\DeployMessage']]
- ['addInternalMessageBinding', ['deployResultQueue', 'ExampleBundle\Entity\Message\DeployResultMessage']]
public: true
```
5. ... and create your consumers based on GeneralConsumer. Example:
```yaml
example_consumer:
class: AppBundle\Consumer\ExampleConsumer
autowire: false
autoconfigure: false
parent: codibly_queues.general_consumer
public: true
tags:
- { name: bernard.receiver, message: exampleQueue }
```
6. Add some events and subscribers, e.x.:
```php
message = $message;
}
/**
* @return ExampleMessage
*/
public function getMessage(): ExampleMessage
{
return $this->message;
}
}
```
```php
logger = $logger;
}
protected function getContext(): string
{
if (null === $this->currentMessageId) {
return $this->getParentContext();
}
return 'Message ' . $this->currentMessageId;
}
public static function getSubscribedEvents()
{
return [
ExampleEvent::NAME => 'executeExample',
];
}
public function executeExample(ExampleEvent $event)
{
$message = $event->getMessage();
$this->currentMessageId = $message->getMessageId();
$this->logger->debug('Received message [' . $this->currentMessageId . ']: ' . var_export($message->toArray(), true));
// ... another actions on some services ...
}
}
```
7. Run
```bash
php bin/console doctrine:schema:update --dump-sql --force
```
8. Configure your Bernad, example configuration:
```yaml
aws:
version: '%aws_ver%'
region: '%aws_region%'
credentials:
key: '%aws_key%'
secret: '%aws_secret%'
DynamoDb:
region: '%aws_region%'
S3:
version: '%aws_s3_ver%'
Sqs:
credentials: '@aws_credentials'
endpoint: '%aws_sqs_endpoint%'
bernard:
driver: sqs
options:
sqs_service: aws.sqs
sqs_queue_map: # optional for aliasing queue urls (default alias is the url section after the last "/")
exampleQueue: '%example_queue_url%'
prefetch: 1 # optional, but beware the default is >1 and you may run into invisibility timeout problems with that
```
services.yml
```yaml
aws_credentials:
class: Aws\Credentials\Credentials
arguments:
- '%aws_key%'
- '%aws_secret%'
```