{"id":20795680,"url":"https://github.com/graze/queue","last_synced_at":"2025-05-06T07:05:50.382Z","repository":{"id":22200544,"uuid":"25532998","full_name":"graze/queue","owner":"graze","description":":postbox: Flexible abstraction for working with queues in PHP.","archived":false,"fork":false,"pushed_at":"2018-05-25T12:51:27.000Z","size":179,"stargazers_count":49,"open_issues_count":6,"forks_count":10,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-04-15T09:06:59.276Z","etag":null,"topics":["php","queue","sqs"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graze.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-10-21T16:25:33.000Z","updated_at":"2024-06-14T16:42:38.000Z","dependencies_parsed_at":"2022-08-20T22:10:27.844Z","dependency_job_id":null,"html_url":"https://github.com/graze/queue","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graze%2Fqueue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graze%2Fqueue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graze%2Fqueue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graze%2Fqueue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graze","download_url":"https://codeload.github.com/graze/queue/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252638602,"owners_count":21780617,"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":["php","queue","sqs"],"created_at":"2024-11-17T16:23:18.368Z","updated_at":"2025-05-06T07:05:50.351Z","avatar_url":"https://github.com/graze.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Queue\n\n\u003cimg align=\"right\" src=\"http://i.giphy.com/100mhETqKYJNf2.gif\" width=\"260 \"/\u003e\n\n[![PHP ~5.5][ico-engine]][lang]\n[![Latest Version][ico-package]][package]\n[![MIT Licensed][ico-license]][license]\n[![Build Status][ico-build]][travis]\n[![Coverage Status][ico-coverage]][coverage]\n[![Quality Score][ico-quality]][quality]\n[![Total Downloads][ico-downloads]][downloads]\n\nThis library provides a flexible abstraction layer for working with queues.\n\nIt can be installed in whichever way you prefer, but we recommend [Composer][package].\n\n`~$ composer require graze/queue`\n\n\u003c!-- Links --\u003e\n[travis]: https://travis-ci.org/graze/queue\n[lang]: https://secure.php.net\n[package]: https://packagist.org/packages/graze/queue\n[license]: https://github.com/graze/queue/blob/master/LICENSE\n[coverage]: https://scrutinizer-ci.com/g/graze/queue/code-structure\n[quality]: https://scrutinizer-ci.com/g/graze/queue\n[downloads]: https://packagist.org/packages/graze/queue\n\n\u003c!-- Images --\u003e\n[ico-license]: https://img.shields.io/packagist/l/graze/queue.svg?style=flat-square\n[ico-package]: https://img.shields.io/packagist/v/graze/queue.svg?style=flat-square\n[ico-build]: https://img.shields.io/travis/graze/queue/master.svg?style=flat-square\n[ico-engine]: https://img.shields.io/badge/php-%3E%3D5.5-8892BF.svg?style=flat-square\n[ico-coverage]: https://img.shields.io/scrutinizer/coverage/g/graze/queue.svg?style=flat-square\n[ico-quality]: https://img.shields.io/scrutinizer/g/graze/queue.svg?style=flat-square\n[ico-downloads]: https://img.shields.io/packagist/dt/graze/queue.svg?style=flat-square\n\n## Documentation\n\nQueue operations center around lists of Message objects. Whether you're sending\none or multiple Messages, it's always an array. Workers work only on one Message\nobject at a time, whether a list of one or multiple is received from the queue.\n\n```php\nuse Aws\\Sqs\\SqsClient;\nuse Graze\\Queue\\Adapter\\SqsAdapter;\nuse Graze\\Queue\\Client;\nuse Graze\\Queue\\Message\\MessageInterface;\n\n$client = new Client(new SqsAdapter(new SqsClient([\n    'region'  =\u003e 'us-east-1',\n    'version' =\u003e '2012-11-05',\n    'credentials' =\u003e [\n        'key'    =\u003e 'ive_got_the_key',\n        'secret' =\u003e 'ive_got_the_secret'\n    ],\n]), 'queue_name'));\n\n// Producer\n$client-\u003esend([\n    $client-\u003ecreate('foo'),\n]);\n\n// Consumer\n$client-\u003ereceive(function (MessageInterface $msg) {\n    var_dump($msg-\u003egetBody());\n    var_dump($msg-\u003egetMetadata()-\u003egetAll());\n});\n```\n\n### Adapters\n\nThe Adapter object is used to fulfill the low level requests to the queue provider.\n\nCurrently supported queue providers are:\n\n - [Array](src/Adapter/ArrayAdapter.php)\n - [AWS SQS](src/Adapter/SqsAdapter.php) (with the [AWS SDK](http://aws.amazon.com/sdk-for-php/))\n\n### Handlers\n\nThe Handler object is used to execute worker callables with a list of received messages and handle Acknowledgement.\n\nThe current handlers are:\n\n - [Batch Acknowledgement](src/Handler/BatchAcknowledgementHandler.php) to acknowledge batches\n - [Eager Acknowledgement](src/Handler/EagerAcknowledgementHandler.php) to acknowledge immediately after work\n - [Null Acknowledgement](src/Handler/NullAcknowledgementHandler.php) for development\n\n```php\nuse Graze\\Queue\\Client;\nuse Graze\\Queue\\Adapter\\ArrayAdapter;\nuse Graze\\Queue\\Handler\\BatchAcknowledgementHandler;\nuse Graze\\Queue\\Message\\MessageInterface;\n\n// Create client with the Batch Acknowledgement Handler.\n$client = new Client(new ArrayAdapter(), [\n    'handler' =\u003e new BatchAcknowledgementHandler(),\n]);\n\n// Receive a maximum of 10 messages.\n$client-\u003ereceive(function (MessageInterface $message) {\n    // Do some work.\n}, 10);\n```\n\n### Polling\n\nPolling a queue is supported by passing `null` as the limit argument to the\n`receive` method. The second argument given to your worker is a `Closure` you\nshould use to stop polling when you're finished working. Make sure you use a\nhandler that acknowledges work effectively too!\n\nNote that the individual Adapter objects may decide to stop polling at any time.\nA likely scenario where it may stop would be if the queue is of finite length\nand all possible messages have been received.\n\n```php\nuse Graze\\Queue\\Client;\nuse Graze\\Queue\\Adapter\\ArrayAdapter;\nuse Graze\\Queue\\Handler\\BatchAcknowledgementHandler;\nuse Graze\\Queue\\Message\\MessageInterface;\n\n// Create client with the Batch Acknowledgement Handler.\n$client = new Client(new ArrayAdapter(), [\n    'handler' =\u003e new BatchAcknowledgeHandler(100), // Acknowledge after 100 messages.\n]);\n\n// Poll until `$done()` is called.\n$client-\u003ereceive(function (MessageInterface $message, Closure $done) {\n    // Do some work.\n\n    // You should always define a break condition (i.e. timeout, expired session, etc).\n    if ($breakCondition) $done();\n}, null);\n```\n\n## License\n\nThe content of this library is released under the **MIT License** by **Nature Delivered Ltd.**\n\nYou can find a copy of this license in [`LICENSE`][license] or at http://opensource.org/licenses/mit.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraze%2Fqueue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraze%2Fqueue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraze%2Fqueue/lists"}