Register API
В примерах $clusterSecret задаётся проверенным общим конфигом из инструкции установки. Не используйте пустые или шаблонные ключи.
Register обеспечивает service discovery и координацию между компонентами Cluster.
Создание экземпляра
Заголовок раздела «Создание экземпляра»use localzet\Cluster\Register;
$register = new Register('text://127.0.0.1:1236', [], $clusterSecret);Основные свойства
Заголовок раздела «Основные свойства»Имя Register процесса
$register->name = 'Register';$secretKey
Заголовок раздела «$secretKey»Секретный ключ для аутентификации
$register->secretKey = $clusterSecret;Важно: Все компоненты (Gateway, Business Worker) должны использовать тот же secretKey.
Протокол
Заголовок раздела «Протокол»Register использует текстовый протокол (Text) для простоты и надежности.
Автоматическая генерация ключа
Заголовок раздела «Автоматическая генерация ключа»Если secretKey не указан, Register автоматически генерирует случайный ключ:
$register = new Register('text://127.0.0.1:1236');// Ключ будет автоматически сгенерирован// Используйте $register->secretKey для получения сгенерированного ключаПример использования
Заголовок раздела «Пример использования»<?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();}Протокол обмена
Заголовок раздела «Протокол обмена»Register общается с компонентами через простой JSON протокол:
События от Gateway
Заголовок раздела «События от Gateway»gateway_connect:
{ "event": "gateway_connect", "address": "127.0.0.1:2800", "secret_key": "your-secret-key"}События от Business Worker
Заголовок раздела «События от Business Worker»server_connect:
{ "event": "server_connect", "secret_key": "your-secret-key"}Ответы от Register
Заголовок раздела «Ответы от 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"}Как это работает
Заголовок раздела «Как это работает»- Gateway регистрируется: Gateway запускается и отправляет свой внутренний адрес в Register
- Register хранит адреса: Register сохраняет список всех Gateway адресов
- Business Worker запрашивает адреса: Business Worker подключается и получает список Gateway
- Business Worker подключается: Business Worker подключается ко всем Gateway для получения событий
Несколько Register
Заголовок раздела «Несколько 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'];Безопасность
Заголовок раздела «Безопасность»- Secret Key: Обязательно используйте одинаковый
secretKeyво всех компонентах - Сеть: Размещайте Register во внутренней сети, недоступной извне
- Firewall: Ограничьте доступ к Register порту только компонентам кластера
Мониторинг
Заголовок раздела «Мониторинг»Для диагностики используйте журнал процессов Server и состояние соединений. Полного журнала всех событий регистрации в текущей реализации нет. Не записывайте общий ключ или полные сообщения регистрации в логи.
Troubleshooting
Заголовок раздела «Troubleshooting»Gateway не регистрируется
Заголовок раздела «Gateway не регистрируется»- Проверьте, что
secretKeyсовпадает - Проверьте сетевую доступность Register
- Проверьте логи Register и Gateway
Business Worker не получает адреса Gateway
Заголовок раздела «Business Worker не получает адреса Gateway»- Убедитесь, что Gateway запущен и зарегистрирован
- Проверьте логи Register
- Проверьте
secretKeyв Business Worker