Сервер очередей#
Отправка событий в сервер очередей#
В сервер очередей могут быть отправлены следующие события:
регистрация пользователя (
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"
}
]
}