Register API
В примерах $clusterSecret задаётся проверенным общим конфигом из инструкции установки. Не используйте пустые или шаблонные ключи.
Register обеспечивает service discovery и координацию между компонентами Cluster.
Создание экземпляра
Section titled “Создание экземпляра”use localzet\Cluster\Register;
$register = new Register('text://127.0.0.1:1236', [], $clusterSecret);Основные свойства
Section titled “Основные свойства”Имя Register процесса
$register->name = 'Register';$secretKey
Section titled “$secretKey”Секретный ключ для аутентификации
$register->secretKey = $clusterSecret;Важно: Все компоненты (Gateway, Business Worker) должны использовать тот же secretKey.
Протокол
Section titled “Протокол”Register использует текстовый протокол (Text) для простоты и надежности.
Автоматическая генерация ключа
Section titled “Автоматическая генерация ключа”Если secretKey не указан, Register автоматически генерирует случайный ключ:
$register = new Register('text://127.0.0.1:1236');// Ключ будет автоматически сгенерирован// Используйте $register->secretKey для получения сгенерированного ключаПример использования
Section titled “Пример использования”<?phpuse localzet\Cluster\Register;
require_once __DIR__ . '/cluster-config.php';
$register = new Register('text://127.0.0.1:1236');$register->name = 'Register';$register->secretKey = $clusterSecret;
// Provision the same environment secret on every node.
if (!defined('GLOBAL_START')) { \localzet\Server::runAll();}Протокол обмена
Section titled “Протокол обмена”Register общается с компонентами через простой JSON протокол:
События от Gateway
Section titled “События от Gateway”gateway_connect:
{ "event": "gateway_connect", "address": "127.0.0.1:2800", "secret_key": "your-secret-key"}События от Business Worker
Section titled “События от Business Worker”server_connect:
{ "event": "server_connect", "secret_key": "your-secret-key"}Ответы от Register
Section titled “Ответы от Register”broadcast_addresses:
{ "event": "broadcast_addresses", "addresses": ["127.0.0.1:2800", "127.0.0.1:2801", "127.0.0.1:2802"]}ping:
{ "event": "ping"}Как это работает
Section titled “Как это работает”- Gateway регистрируется: Gateway запускается и отправляет свой внутренний адрес в Register
- Register хранит адреса: Register сохраняет список всех Gateway адресов
- Business Worker запрашивает адреса: Business Worker подключается и получает список Gateway
- Business Worker подключается: Business Worker подключается ко всем Gateway для получения событий
Несколько Register
Section titled “Несколько Register”Можно указать несколько процессов service discovery. Этот пример не подтверждает отказоустойчивость: переключение и восстановление соединений требуют отдельного интеграционного теста.
// Register 1$register1 = new Register('text://127.0.0.1:1236', [], $clusterSecret);
// Register 2$register2 = new Register('text://127.0.0.1:1237', [], $clusterSecret);
// Configure both addresses on Gateway and Business Worker.$gateway->registerAddress = ['127.0.0.1:1236', '127.0.0.1:1237'];Безопасность
Section titled “Безопасность”- Secret Key: Обязательно используйте одинаковый
secretKeyво всех компонентах - Сеть: Размещайте Register во внутренней сети, недоступной извне
- Firewall: Ограничьте доступ к Register порту только компонентам кластера
Мониторинг
Section titled “Мониторинг”Для диагностики используйте журнал процессов Server и состояние соединений. Полного журнала всех событий регистрации в текущей реализации нет. Не записывайте общий ключ или полные сообщения регистрации в логи.
Troubleshooting
Section titled “Troubleshooting”Gateway не регистрируется
Section titled “Gateway не регистрируется”- Проверьте, что
secretKeyсовпадает - Проверьте сетевую доступность Register
- Проверьте логи Register и Gateway
Business Worker не получает адреса Gateway
Section titled “Business Worker не получает адреса Gateway”- Убедитесь, что Gateway запущен и зарегистрирован
- Проверьте логи Register
- Проверьте
secretKeyв Business Worker