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