В отдельных сегментах сети оператора используются различные схемы доступа и работают независимо друг от друга отдельные DHCP- и RADIUS-серверы. На каждом сервере установлен отдельный экземпляр агента HARD с отдельным кэшем в MongoDB. Необходимо обеспечить получение каждым агентом HARD сообщений из двух общих очередей провижининга.
Сообщения, получаемые ActiveMQ из очередей провижининга (Oracle AQ) распространяются в режиме мультикаста по нескольким собственным очередям. Каждый агент HARD работает со своей ActiveMQ-очередью и получает свою копию сообщения из провижининга.
... <camelContext xmlns="http://camel.apache.org/schema/spring" id="camel"> ... <route> <from uri="oracleTopic:topic:AIS_NET.HP_PROFILES_1?clientId=ActiveMQ&durableSubscriptionName=HP"/> <multicast stopOnException="true"> <to uri="activemq:queue:hydra_profiles_pppoe-rad"/> <!-- Equipment profiles for HARD agent at PPPoE RADIUS-server --> <to uri="activemq:queue:hydra_profiles_ran-dhcp"/> <!-- Equipment profiles for HARD agent at Radio Access Network DHCP-server --> <to uri="activemq:queue:hydra_profiles_ran-rad"/> <!-- Equipment profiles for HARD agent at Radio Access Network RADIUS-server --> </multicast> </route> <route> <from uri="oracleTopic:topic:AIS_NET.HP_EQUIPMENT_BINDS_1?clientId=ActiveMQ&durableSubscriptionName=HP"/> <multicast stopOnException="true"> <to uri="activemq:queue:hydra_equipment_binds_pppoe-rad"/> <!-- Equipment binds for HARD agent at PPPoE RADIUS-server --> <to uri="activemq:queue:hydra_equipment_binds_ran-dhcp"/> <!-- Equipment binds for HARD agent at Radio Access Network DHCP-server --> <to uri="activemq:queue:hydra_equipment_binds_ran-rad"/> <!-- Equipment binds for HARD agent at Radio Access Network RADIUS-server --> </multicast> </route> ... </camelContext> ... |
... # Настройки подключения к ActiveMQ syncer: stomp: # Адрес host: '192.168.123.45' # Порт port: 61613 # Имя пользователя login: 'hydra' # Пароль пользователя password: 'Change me please' queues: # Наименование очереди с профилями profiles: 'hydra_profiles_pppoe-rad' # Наименование очереди с привязками binds: 'hydra_equipment_binds_pppoe-rad' ... |
... # Настройки подключения к ActiveMQ syncer: stomp: # Адрес host: '192.168.123.45' # Порт port: 61613 # Имя пользователя login: 'hydra' # Пароль пользователя password: 'Change me please' queues: # Наименование очереди с профилями profiles: 'hydra_profiles_ran-rad' # Наименование очереди с привязками binds: 'hydra_equipment_binds_ran-rad' ... |
Один из используемых для провижининга оборудования скриптов работает очень медленно: например он управляет портами коммутаторов доступа по SNMP и часто отправляет команды повторно из-за отсутствия ответа коммутаторов при одной попытке. Так как очередь используется общая, команды с данным скриптом могут «тормозить» при большой нагрузке выполнение «быстрых» команд управления сессиями на BRAS'е. Необходимо отделить обработку проблемных команд от основного потока.
Сообщения с медленными командами выделяются брокером в отдельную очередь для агента HEX — обрабатываются данные сообщения независимо от остальных.
... <camelContext xmlns="http://camel.apache.org/schema/spring" id="camel"> ... <route> <from uri="oracleTopic:topic:AIS_NET.HP_COMMANDS_1?clientId=ActiveMQ&durableSubscriptionName=HP"/> <choice> <when> <xpath>count(/command/vc_command[contains(.,'/opt/hydra/scripts/reset-switch-port.sh')]) > 0</xpath> <to uri="activemq:queue:hydra_commands_reset-switch-port"/> </when> <otherwise> <to uri="activemq:queue:hydra_commands"/> </otherwise> </choice> </route> <route> <from uri="activemq:queue:hydra_command_results"/> <to uri="oracleTopic:topic:AIS_NET.HP_COM_RES_1?clientId=ActiveMQ&durableSubscriptionName=HP"/> </route> ... </camelContext> ... |
... hydra: command_queues: # <Очередь для приёма команд>: <Очередь для отправки результата> - 'hydra_commands': 'hydra_command_results' - 'hydra_commands_reset-switch-port': 'hydra_command_results' ... |