五实验室 / amqp
用于从代理(RabbitMQ)发布/接收消息的库。
v2.1.1
2024-05-21 09:13 UTC
Requires
- php: ^8.2
Requires (Dev)
- ext-amqp: *
- ext-sockets: *
- escapestudios/symfony2-coding-standard: ~3.5
- fivelab/ci-rules: dev-master
- fivelab/transactional: ~2.0
- guzzlehttp/guzzle: ~6.5.6
- php-amqplib/php-amqplib: ^3.5
- phpmetrics/phpmetrics: ~2.7
- phpstan/phpstan: ~1.11.0
- phpunit/phpunit: ~10.1
- psr/log: *
- ramsey/uuid: ~4.7
- symfony/console: ~5.4 | ~6.0
Suggests
- ext-amqp: For use amqp extension.
- ext-sockets: For php-amqplib
- fivelab/transactional: For use transactional layer with this wrapper.
- php-amqplib/php-amqplib: pure PHP driver
- ramsey/uuid: For use UUID message id generator
- symfony/console: For configure console commands for run consumer.
README
#StandWithUkraine事件代理:AMQP
此库用于从RabbitMQ接收事件并将消息发布到AMQP。
为什么是它?
在许多应用程序中,我们必须使用后台进程来处理数据或创建/更新/删除任何条目。为此,我们使用AMQP和RabbitMQ。但是,在AMQP的基本实现中(PHP 扩展和PHPAmqpLib)我们遇到了一些问题
- 在创建交换或队列之前,我们应该连接到RabbitMQ。但是在我们的逻辑(以控制器为例)中,我们不需要发送消息到RabbitMQ。
- 声明交换或队列的所有选项都设置为标志,这可能难以理解和容易出错。
我们在这个库中将此过程完全隔离,以便易于发送消息到交换并轻松从队列接收消息。
定义
AMQP的所有条目都有一个自定义定义。每个定义都有自定义参数来声明交换或队列。
工厂
AMQP的所有条目都有一个工厂。它允许在实际使用过程中创建实际实例。
适配器
我们创建了一个库,它可以支持连接到代理的任何适配器。开箱即用的支持驱动程序包括
ext-amqp
- composer php-amqplib
文档
所有文档存储在/docs/
目录中。
开发
为了便于开发,您可以使用Docker
。
注意:我们使用内部网络将我们的库与RabbitMQ连接以进行测试和开发。
docker network create --driver bridge amqp docker run -d --rm \ --network amqp \ --name amqp-rabbitmq \ rabbitmq:management docker build -t amqp . docker run -it --rm \ --name amqp \ -v $(pwd):/code \ --network amqp \ -e "RABBITMQ_HOST=amqp-rabbitmq" \ amqp bash
注意:为了调试,您可以公开15672端口以访问管理插件。
在成功运行并附加到容器后,您必须安装依赖项
composer update
在创建PR或将其合并到develop之前,请运行以下命令以验证代码
./bin/phpunit ./bin/phpcs --config-set show_warnings 0 ./bin/phpcs --standard=vendor/escapestudios/symfony2-coding-standard/Symfony/ src/ ./bin/phpcs --standard=tests/phpcs-ruleset.xml tests/