apex / cluster
负载均衡器/路由器,用于水平扩展
2.0.3
2023-10-20 08:01 UTC
Requires
- php: >=8.0
- apex/container: >=2.0
- monolog/monolog: ^3.4
- php-amqplib/php-amqplib: ^3.0
- psr/event-dispatcher: ^1.0
- symfony/string: ^6.0
- symfony/yaml: ^6.0
Requires (Dev)
- apex/signer: ^2.0
- phpunit/phpunit: ^9.5
README
Cluster 提供了一个简单直观的接口,通过 RabbitMQ 或任何消息代理来实现应用程序的水平扩展。使用本地消息代理,您可以在单个服务器上轻松开发软件,并实现完全的水平扩展,当需要时,可以在几分钟内将它们拆分为多个服务器实例。它支持
- 通用轮询和将指定消息路由到特定服务器实例。
- 单向队列消息,双向 RPC 调用,以及系统级广播。
- 基于参数/头部的路由。
- 易于配置的 YAML 路由文件。
- 可选的集中式 redis 存储路由配置,以便跨服务器实例进行维护。
- 标准化的不可变请求和响应对象,便于使用和互操作性。
- 前端处理器,用于简化与前端服务器的通信,并允许执行客户端事件(例如设置模板变量等)。
- 超时和消息准备处理器,以及并发设置。
- 可与其他任何消息代理交换,包括轻松实现自己的消息代理的能力。
- 包括本地消息代理,允许在单个服务器实例上实现水平扩展的逻辑。
- 可选的自动路由,允许消息自动路由到与命名路由键相关联的正确类和方法。
目录
- Cluster 类/容器定义
- 路由器概述
- 消息处理
- 消息
- 前端处理器
安装
使用 composer 安装
composer require apex/cluster
基本用法
请参阅 /examples 目录以获取更深入的示例。
保存 Math.php 类
namespace App; class Math { public function add(MessageRequestInterface $msg) { list($x, $y) = $msg->getParams(); return ($x + $y); } }
定义监听器
use Apex\Cluster\Cluster; use Apex\Cluster\Listener; use Apex\Cluster\Brokers\RabbitMQ; // Start cluster $cluster = new Cluster('app1'); $cluster->setBroker(new RabbitMQ('localhost', 5672, 'guest', 'guest')); $cluster->addRoute('basic.math.*', App\Math::class); // Start listener $listener = new Listener(); $listener->listen();
定义分发器
use Apex\Cluster\Dispatcher; use Apex\Cluster\Message\MessageRequest; // Define message $msg = new MessageRequest('basic.math.add', 6, 9); // Dispatch message $dispatcher = new Dispatcher('web1'); $sum = $dispatcher->dispatch($msg)->getResponse(); // Print result echo "Sum is: $sum\n";
关注 Apex
即将推出大量优质的开源软件包,更高级的文章/教程,涵盖实用的主题等。通过加入我们网站上的邮件列表或关注 Twitter 上的@mdizak1来保持最新信息。