{"id":18351871,"url":"https://github.com/codibly/queuesbundle","last_synced_at":"2025-06-14T16:38:34.933Z","repository":{"id":98217754,"uuid":"96770700","full_name":"codibly/QueuesBundle","owner":"codibly","description":"Bundle with utilities of queues dealing based on BernardBundle","archived":false,"fork":false,"pushed_at":"2017-07-14T09:39:59.000Z","size":19,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-10T00:46:14.682Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codibly.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-10T11:38:29.000Z","updated_at":"2017-08-25T07:53:24.000Z","dependencies_parsed_at":"2023-05-18T16:46:17.765Z","dependency_job_id":null,"html_url":"https://github.com/codibly/QueuesBundle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codibly/QueuesBundle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codibly%2FQueuesBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codibly%2FQueuesBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codibly%2FQueuesBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codibly%2FQueuesBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codibly","download_url":"https://codeload.github.com/codibly/QueuesBundle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codibly%2FQueuesBundle/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259847578,"owners_count":22921160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T21:33:16.161Z","updated_at":"2025-06-14T16:38:34.916Z","avatar_url":"https://github.com/codibly.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QueuesBundle\nBundle with utilities of queues dealing based on BernardBundle\n\nInstallation\n\n1. Add to your composer.json\n``` json\n\"require\": {\n    (...)\n    \"codibly/queues-bundle\": \"dev-master\"\n}\n\n\"repositories\": [\n    (...)\n    {\n        \"type\": \"vcs\",\n        \"url\": \"https://github.com/codibly/QueuesBundle\"\n    }\n]\n```\n\n2. Create main abstract Message entity extening Codibly\\QueuesBundle\\Message\\MessageEntityAbstract, for example:\n\n```php\n\u003c?php\n\nnamespace AppBundle\\Entity\\Message;\n\nuse Codibly\\QueuesBundle\\Message\\MessageEntityAbstract;\nuse Doctrine\\ORM\\Mapping as ORM;\n\n\n/**Interface\n * @ORM\\Entity()\n * @ORM\\Table(name=\"messages\")\n * @ORM\\InheritanceType(\"SINGLE_TABLE\")\n * @ORM\\DiscriminatorColumn(name=\"type\", type=\"string\")\n * @ORM\\DiscriminatorMap({\n *     \"deploy\" = \"DeployMessage\",\n *     \"deploy_result\" = \"DeployResultMessage\",\n * })\n */\nabstract class Message extends MessageEntityAbstract\n{\n}\n```\n\n3. Create another Messages entities based on main Message abstract. Notice, that every data received from message should \nbe mapped using setters and getters methods. You should also list that properties in getRequiredProperties() method.\n\n```php\n\u003c?php\n\nnamespace AppBundle\\Entity\\Message;\n\nuse Doctrine\\ORM\\Mapping as ORM;\nuse Symfony\\Component\\Validator\\Constraints as Assert;\n\n/**\n * @ORM\\Entity()\n */\nclass DeployMessage extends Message\n{\n\n    /**\n     * @ORM\\Column(type=\"string\")\n     *\n     * @Assert\\NotBlank(message=\"Required client name\")\n     *\n     * @var string\n     */\n    protected $clientName;\n    \n    /**\n     * @return string\n     */\n    public function getClientName(): string\n    {\n        return $this-\u003eclientName;\n    }\n\n    /**\n     * @param string $clientName\n     * @return $this\n     */\n    public function setClientName(string $clientName)\n    {\n        $this-\u003eclientName = $clientName;\n\n        return $this;\n    }\n        \n    /**\n     * @return array\n     */\n    protected function getRequiredProperties(): array\n    {\n        $parentRequired = parent::getRequiredProperties();\n        $currentRequired = ['clientName'];\n\n        return array_merge($parentRequired, $currentRequired);\n    }\n}\n```\n\n4. Add to your services.yml definition for MessageFactory service, completing calls section for add message binding:\n\n```yaml\ncodibly_queues.message_factory:\n    class: Codibly\\QueuesBundle\\MessageFactory\n    arguments: ['@monolog.logger', '@codibly_queues.hash_generator.sha_hash']\n    calls:\n        - ['addInternalMessageBinding', ['deployQueue', 'ExampleBundle\\Entity\\Message\\DeployMessage']]\n        - ['addInternalMessageBinding', ['deployResultQueue', 'ExampleBundle\\Entity\\Message\\DeployResultMessage']]\n    public: true\n```\n5. ... and create your consumers based on GeneralConsumer. Example:\n```yaml\nexample_consumer:\n        class: AppBundle\\Consumer\\ExampleConsumer\n        autowire: false\n        autoconfigure: false\n        parent: codibly_queues.general_consumer\n        public: true\n        tags:\n            - { name: bernard.receiver, message: exampleQueue }\n```\n\n6. Add some events and subscribers, e.x.:\n\n```php\n\n\u003c?php\n\nnamespace AppBundle\\Event;\n\nuse AppBundle\\Entity\\Message\\ExampleMessage;\nuse Symfony\\Component\\EventDispatcher\\Event;\n\nclass ExampleEvent extends Event\n{\n    const NAME = 'example';\n\n    /**\n     * @var ExampleMessage\n     */\n    private $message;\n\n    /**\n     * ExampleEvent constructor.\n     * @param ExampleMessage $message\n     */\n    public function __construct(ExampleMessage $message)\n    {\n        $this-\u003emessage = $message;\n    }\n\n    /**\n     * @return ExampleMessage\n     */\n    public function getMessage(): ExampleMessage\n    {\n        return $this-\u003emessage;\n    }\n}\n\n\n```\n\n```php\n\u003c?php\n\nnamespace AppBundle\\EventListener;\n\nuse AppBundle\\Event\\ExampleEvent;\nuse Codibly\\QueuesBundle\\Traits\\ContextLogger;\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Component\\EventDispatcher\\EventSubscriberInterface;\n\nclass ExampleSubscriber implements EventSubscriberInterface\n{\n    use ContextLogger {\n        getContext as getParentContext;\n    }\n\n    /** @var LoggerInterface */\n    private $logger;\n\n    /** @var string */\n    private $currentMessageId;\n\n    /**\n     * @param LoggerInterface $logger\n     */\n    public function __construct(LoggerInterface $logger)\n    {\n        $this-\u003elogger = $logger;\n    }\n\n    protected function getContext(): string\n    {\n        if (null === $this-\u003ecurrentMessageId) {\n            return $this-\u003egetParentContext();\n        }\n\n        return 'Message ' . $this-\u003ecurrentMessageId;\n    }\n\n    public static function getSubscribedEvents()\n    {\n        return [\n            ExampleEvent::NAME =\u003e 'executeExample',\n        ];\n    }\n\n    public function executeExample(ExampleEvent $event)\n    {\n        $message = $event-\u003egetMessage();\n        $this-\u003ecurrentMessageId = $message-\u003egetMessageId();\n\n        $this-\u003elogger-\u003edebug('Received message [' . $this-\u003ecurrentMessageId . ']: ' . var_export($message-\u003etoArray(), true));\n\n        // ... another actions on some services ...\n    }\n\n}\n\n\n```\n\n7. Run \n```bash\nphp bin/console doctrine:schema:update --dump-sql --force\n```\n\n8. Configure your Bernad, example configuration:\n\n```yaml\naws:\n    version: '%aws_ver%'\n    region: '%aws_region%'\n    credentials:\n        key: '%aws_key%'\n        secret: '%aws_secret%'\n    DynamoDb:\n        region: '%aws_region%'\n    S3:\n        version: '%aws_s3_ver%'\n    Sqs:\n        credentials: '@aws_credentials'\n        endpoint: '%aws_sqs_endpoint%'\n\nbernard:\n    driver: sqs\n    options:\n        sqs_service: aws.sqs\n        sqs_queue_map: # optional for aliasing queue urls (default alias is the url section after the last \"/\")\n            exampleQueue: '%example_queue_url%'\n        prefetch: 1 # optional, but beware the default is \u003e1 and you may run into invisibility timeout problems with that\n\n```\n\nservices.yml\n```yaml\naws_credentials:\n        class: Aws\\Credentials\\Credentials\n        arguments:\n            - '%aws_key%'\n            - '%aws_secret%'\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodibly%2Fqueuesbundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodibly%2Fqueuesbundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodibly%2Fqueuesbundle/lists"}