bitninja/ninjarpc

基于消息队列的微服务RPC。

3.0.3 2023-12-11 13:01 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许可证。