Сервер очередей#
Отправка событий в сервер очередей#
В сервер очередей могут быть отправлены следующие события:
- регистрация пользователя ( - USER_REGISTERED);
- смена пароля ( - USER_PASSWORD_SET);
- смена признака аннулирования сессий ( - USER_CRID_CHANGED);
- изменения атрибутов пользователя ( - USER_ATTRIBUTE_CHANGED);
- очистка атрибутов пользователя ( - USER_ATTRIBUTE_REMOVED);
- удаление пользователя ( - USER_REMOVED);
- привязка внешней учетной записи ( - FEDERATION_POINT_BOUND);
- отвязка внешней учетной записи ( - FEDERATION_POINT_UNBOUND);
- отзыв выданного приложению разрешения ( - scopes) (- SCOPES_REVOKED);
- создание группы ( - GROUP_CREATED);
- изменение атрибутов группы ( - GROUP_UPDATED);
- удаление группы ( - GROUP_REMOVED);
- включение пользователя в группу ( - GROUP_MEMBER_ADDED);
- исключение пользователя из группы ( - GROUP_MEMBER_REMOVED).
Для отправки событий в очередь следует создать блок
blitz.prod.local.idp.events следующего содержания (на примере
регистрации пользователя и смены пароля):
"events" : {
    "drivers" : {
        "rabbit_driver" : {
            "properties" : { // optional
                "virtual": {
                    "host": "testVhost"
                }
            },
            "server" : {
                "host" : "<RMQ_HOST>",
                "port" : 5672
            },
            "type" : "RMQ",
            "user" : {
                "password" : "<RMQ_PASS>",
                "username" : "<RMQ_USERNAME>"
            }
        }
    },
    "routes" : {
        "USER_PASSWORD_SET" : [
            "password_sync"
        ],
        "USER_REGISTERED" : [
            "registration"
        ]
    },
    "targets" : [
        {
            "discardList" : "PSWD_SYNC_DISCARD",
            "driver" : {
                "ext" : {
                    "exchange_name" : "users",
                    "routing_key" : "pwd_sync"
                },
                "id" : "rabbit_driver"
            },
            "encCertificate" : "rmqkey",
            "name" : "password_sync",
            "redelivery" : 3
        },
        {
            "discardList" : "REG_DISCARD",
            "driver" : {
                "ext" : {
                    "exchange_name" : "users",
                    "routing_key" : "registration"
                },
                "id" : "rabbit_driver"
            },
            "encCertificate" : "rmqkey",
            "name" : "registration",
            "redelivery" : 3
        }
    ]
}
В данных настройках следует задать:
- RMQ_HOST– домен сервера очередей RabbitMQ;
- RMQ_USERNAME– имя пользователя для работы с сервером очередей;
- RMQ_PASS– пароль для работы с сервером очередей.
Кроме того, для шифрования паролей, отправляемых в очередь (только для
сообщений USER_REGISTERED и USER_PASSWORD_SET), в параметре
encCertificate следует указать псевдоним ключа электронной подписи
(в стандартном хранилище ключей BlitzIdPKeystore.jks), которым
следует шифровать пароли в сообщениях.
Сервер очередей как брокер сообщений#
В Blitz Identity Provider для обработки асинхронных задач применяется встроенный брокер сообщений, использующий для отслеживания задач базу данных.
При большой интенсивности запросов к Blitz Identity Provider может быть
целесообразным использование сервера очередей RabbitMQ в качестве
брокера сообщений. Для этого нужно в консоли RabbitMQ (обычно,
http://hostname:15672/) выполнить следующие настройки:
- создать - queueс именем- blitz-tasks(в меню «Queues» консоли);
- создать - exchangeс именем- blitz-tasks-exh(в меню «Exchanges» консоли) и настроить- bindingна очередь- blitz-tasksс- routing_keyс именем- blitz-tasks;
- создать пользователя - blitz(в меню «Admin» консоли) и назначить ему права на созданную очередь.
После настройки RabbitMQ необходимо скорректировать настройки в
blitz.conf – в блоке blitz.prod.local.idp.tasks установить
broker-type в значение rmq и задать настройки подключения к
RabbitMQ в блоке broker-rmq:
- в параметре - exchangeзадать имя- blitz-tasks-exh;
- в параметре - queueв блоке- executionRulesи в параметре- nameв блоке- queuesзадать имя- blitz-tasks;
- в параметре - usernameв блоке- userзадать имя пользователя (- blitz);
- в параметре - passwordв блоке- userзадать пароль пользователя в открытом виде – после запуска Blitz Identity Provider пароль будет зашифрован;
- в параметрах - hostи- portблока- serverуказать адрес и порт подключения к RabbitMQ;
- при необходимости скорректировать остальные параметры, определяющие размер пула соединений ( - poolSize), количества каналов (- channelSize), время ожидания отклика от сервера очередей (- ackTimeout);
- при необходимости скорректировать настройки брокера обработки задачи, определяющие количество попыток ( - maxAttempts) повторной обработки задач в случае ошибки, время между попытками (- redeliveryDelayInSec), размер обрабатываемой пачки сообщений (- dequeueBatchSize), период проверки очереди (- dequeuePeriodInSec), количество обработчиков (- executorPoolSize):
Пример конфига приведен ниже:
"tasks" : {
    "broker-type" : "rmq",
    "broker-rmq" : {
        "consumer" : {
            "poolSize" : 2
         },
         "exchange" : "blitz-task-exh",
         "publisher" : {
             "ackTimeout" : 15,
              "channelsSize" : 8,
              "poolSize" : 2
         },
         "server" : {
             "host" : "RMQ_HOST",
             "port" : 5672
         },
         "user" : {
             "password" : "CHANGE_ME",
             "username" : "blitz"
         }
    },
    "executionRules" : [
        {
            "maxAttempts" : 2,
            "queue" : "blitz-tasks",
            "redeliveryDelayInSec" : 60
        }
    ],
    "queues" : [
        {
            "dequeueBatchSize" : 10,
            "dequeuePeriodInSec" : 30,
            "executorPoolSize" : 5,
            "name" : "blitz-tasks"
        }
    ]
}
