An open API service indexing awesome lists of open source software.

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

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%'
```