bitninja / ninjarpc
3.0.3
2023-12-11 13:01 UTC
Requires
- php: ~7.0
- bramus/monolog-colored-line-formatter: ~2.0.3
- monolog/monolog: ~1.24.0
- php-amqplib/php-amqplib: ^3.1.1
Requires (Dev)
- edgedesign/phpqa: ~1.23.0
- overtrue/phplint: ~1.1.9
- phpunit/phpunit: ~6.5.14
- sensiolabs/security-checker: ~5.0.3
This package is auto-updated.
Last update: 2024-09-11 14:48:39 UTC
README
易于使用的基于队列的RPC库。您可以使用任何队列系统和任何编码来连接服务器和客户端。使用ninjaRPC,您可以设置基于PHP的微服务堆栈。
安装
composer require bitninja/ninjarpc ~2.1
示例服务器
use BitNinja\NinjaRpc\Server;
use BitNinja\NinjaRpc\Encoders\JsonEncoder;
use BitNinja\NinjaRpc\QueueManagers\RabbitMQ;
// Target service
$ping = function($param1){
echo 'ping was called!';
};
// Set up a queue manager
$queueManager = new RabbitMQ();
// Set up an encoder
$encoder = new JsonEncoder();
// Set up a router
$router = new SimpleRouter([
'ping' => $ping
]);
// Create the server
$server = new Server('TestServer', $queueManager, $encoder, $router);
// Serve requests forever
while (1) {
$server->listen();
}
示例客户端
use BitNinja\NinjaRpc\Client;
use BitNinja\NinjaRpc\Encoders\JsonEncoder;
use BitNinja\NinjaRpc\QueueManagers\RabbitMQ;
// Set up a queue manager
$queueManager = new RabbitMQ()
// Set up an encoder
$encoder = new JsonEncoder();
// Create the client
$client = new Client($queueManager, $encoder);
// Invoke an rpc call
$call = $client->asyncCall('TestServer', 'ping', ['param1' => 'pong']);
// Wait for the response
$call->wait();
// Debug dump the results
$call->dumpResult();
动机
最近,微服务越来越受欢迎,而服务之间相互通信的最佳方式之一是通过消息队列。有众多不同的队列系统。最著名的通用队列系统是RabbitMQ,但您也可以使用redis、ActiveMQ、Kafka等。
NinjaRPC使用消息队列管理RPC调用背后的所有繁琐细节。进行RPC调用不仅仅是发送消息。您还需要处理响应,声明队列,处理超时等。这就是NinjaRPC帮助您的时刻。
您可以使用内置的队列实现或创建自己的实现。(如果您实现了新的队列系统,请发送pull request给我)
此外,您有自由选择编码方式。我实现了一些基本的编码器,如PHP内置的serialize和json,但您也可以自由实现任何其他编码器。
API参考
测试
单元测试
您可以使用phpunit运行单元测试。只需在git源码树的根目录中运行它,它将运行所有单元测试并生成闪亮的报告。
集成测试
您可以运行基本集成测试。请确保设置一个具有默认配置的rabbitmq服务器,或者首先启动docker。
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3
然后您可以开始集成测试。先从服务器开始。
$ cd example
$ php ./server.php
然后在新的控制台中启动客户端。
$ cd example
$ php ./client.php
贡献者
任何贡献都非常受欢迎!如果您实现了新的队列驱动程序或编码器,请发送pull request。
许可证
MIT许可证。