Слушатель InetRadiusListener
Слушатель предназначен для обработки RADIUS-пакетов. Общие сведения о протоколе RADIUS доступны здесь.
Добавляется в контейнер следующим образом.
<
context
name
=
"radius"
>
<!-- Cоздание процессора RADIUS-пакетов -->
<
bean
name
=
"radiusProcessor"
class
=
"ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"
/>
<!-- Служебный ScheduledExecutorService, необходимый для dataLogger -->
<
scheduledExecutorService
name
=
"hrlydtlggr"
corePoolSize
=
"1"
/>
<!-- Cоздание dataLogger, сохраняющего RADIUS-пакеты на диск (только один экземпляр) -->
<
bean
name
=
"radiusDataLogger"
class
=
"ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger"
>
<
param
name
=
"scheduledExecutor"
>hrlydtlggr</
param
>
</
bean
>
<!-- Cоздание слушателя RADIUS-пакетов на порту с передачей ему процессора и dataLogger -->
<
bean
name
=
"radiusListener"
class
=
"ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener"
>
<
constructor
>
<!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех -->
<
param
name
=
"host"
value
=
""
/>
<!-- Порт, на котором будет открыт сокет -->
<
param
name
=
"port"
value
=
"1812"
/>
<!-- Размер буфера приема слушателя -->
<
param
name
=
"recvBufferSize"
>512 * 1024</
param
>
<!-- Рекомендуемый SO_RCVBUF-сокета -->
<
param
name
=
"soRCVBUF"
></
param
>
<!-- Количество потоков-обработчиков -->
<
param
name
=
"threadCount"
>10</
param
>
<!-- Максимальное количество пакетов в очереди на обработку -->
<
param
name
=
"maxQueueSize"
>200</
param
>
<!-- Передача процессора -->
<
param
name
=
"processor"
>radiusProcessor</
param
>
<!-- Режим работы, RadiusListener.Mode.authentication -->
<
param
name
=
"mode"
>RadiusListener.Mode.authentication</
param
>
<!-- Передача dataLogger -->
<
param
name
=
"dataLogger"
>radiusDataLogger</
param
>
</
constructor
>
</
bean
>
</
context
>
Параметры:
radiusProcessor - класс процессора, реализующий логику обработки пакетов;
radiusDataLogger - объект, осуществляющий запись бинарных логов, по умолчанию это объект типа ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger (сохранение бинарных логов с разбивкой по источникам и часам);
host - IP-адрес, на котором слушатель, пустое значение - прослушивать любой IP-адрес;
port - прослушиваемый UDP-порт;
soRCVBUF - рекомендуемый SO_RCVBUF (socket recieve buffer) для сокета. На FreeBSD большие значения могут вызвать ошибку и сервер не запустится;
byteBufferCapacity - размер буфера для приёма пакетов;
threadCount - число потоков-обработчиков пакетов, рекомендуемые значения 10-30, не рекомендуется указывать более 100;
maxQueueSize - максимальный размер очереди пакетов, при превышении размера очереди пакеты начинают отбрасываться и высылается аларм, рекомендуемые значения 200-1000. Следует учитывать, что если по какой-то причине сервер не успевает обрабатывать пакеты, очередь растет, то какие-то пакеты из очереди могут быть обработаны с опозданием и NAS уже выслал повторный запрос, который опять попадет в очередь и опять может быть обработан с опозданием. Поэтому большое значение вместо распределения нагрузки может вызвать ее увеличение;
mode - режим работы, может принимать значения RadiusListener.Mode.authentication для обработки Access-Request-пакетов в InetAccess и RadiusListener.Mode.accounting для обработки Accounting-пакетов в InetAccounting.