...
Code Block | ||
---|---|---|
| ||
... hydra: command_queues: # <Очередь для приёма команд>: <Очередь для отправки результата> - 'hydra_commands': 'hydra_command_results' - 'hydra_commands_reset-switch-port': 'hydra_command_results' ... |
Обновление до версии 6.3+
vc_command теперь содержит значение, закодированное в Base64. В сязи с этим команду для сравнения в xpath также нужно закодировать, например так:
Code Block | ||
---|---|---|
| ||
echo -n "your_command" | base64 |
Полученный результат использовать при выборе маршрутизации <xpath>count(/command/vc_command[contains(.,'your_command_in_base64')]) > 0</xpath>
Если команда может иметь различные вариации, то необходимо выделить общую часть
Команда в UTF-8 | Команда в Base64 |
---|---|
prev-ip-addr: next-ip-addr: 192.168.0.1 | cHJldi1pcC1hZGRyOiAgbmV4dC1pcC1hZGRyOiAxOTIuMTY4LjAuMQ== |
prev-ip-addr: next-ip-addr: 192.168.0.2 | cHJldi1pcC1hZGRyOiAgbmV4dC1pcC1hZGRyOiAxOTIuMTY4LjAuMg== |
prev-ip-addr: 192.168.0.1 next-ip-addr: | cHJldi1pcC1hZGRyOiAxOTIuMTY4LjAuMSBuZXh0LWlwLWFkZHI6IA== |
prev-ip-addr: 192.168.0.2 next-ip-addr: | cHJldi1pcC1hZGRyOiAxOTIuMTY4LjAuMiBuZXh0LWlwLWFkZHI6IA== |
prev-ip-addr: | cHJldi1pcC1hZGRyOg== |
В данном примере можно выделить общую часть команды в Base64 — cHJldi1pcC1hZGRyO, которую и нужно использовать при маршрутизации.
Безусловное автоматическое удаление сообщений из очередей
...
Где Shaper-IP
- название атрибута шаблона операторского профиля (IP-адрес шейпера), 127.0.0.1
- его значение, 192.168.1.1
- IP-адрес ActiveMQ.
Ускорение работы ActiveMQ
Задача
В базе сделана переотправка профилей, но ActiveMQ слишком медленно забирает сообщения из базы. Нужно ускорить работу ActiveMQ
Решение
Мы настраиваем курсор, это делается в конфиге activemq.xml
Code Block | ||||
---|---|---|---|---|
| ||||
...
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" useJmx="false" advisorySupport="false">
<!--
Use VM cursor
For more information, see:
http://activemq.apache.org/message-cursors.html
-->
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true" memoryLimit="1000mb">
<pendingSubscriberPolicy>
<vmCursor />
</pendingSubscriberPolicy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1000mb">
<pendingQueuePolicy>
<vmQueueCursor/>
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
... |
Старые настройки можно убрать
Code Block | ||||
---|---|---|---|---|
| ||||
...
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" >
<!-- The constantPendingMessageLimitStrategy is used to prevent
slow topic consumers to block producers and affect other consumers
by limiting the number of messages that are retained
For more information, see:
http://activemq.apache.org/slow-consumer-handling.html
-->
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
... |
Задача
Скопилась большая очередь результатов команд, ActiveMQ медленно переносит сообщения в очередь Oracle.
Решение
При отправке сообщений в очередь Oracle, ActiveMQ завершает сессию после каждого переданного сообщения. Чтобы изменить такое поведение, настроим использование пула соединений к Oracle.
Изменим URI для очереди Oracle:
Code Block | ||||
---|---|---|---|---|
| ||||
...
<route>
<from uri="activemq:queue:hydra_command_results_1"/>
<to uri="oraclePool:topic:AIS_NET.HP_COM_RES_1?clientId=ActiveMQ&durableSubscriptionName=HP"/>
</route>
... |
И добавим описание PooledConnectionFactory после описания oracleTopic:
Code Block | ||||
---|---|---|---|---|
| ||||
...
<bean id="oracleTopic" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="oracleTopicCredentials"/>
</bean>
<bean id="jmsPooledConnectionFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop" >
<property name="maxConnections" value="7" />
<property name="connectionFactory" ref="oracleTopicCredentials" />
</bean>
<bean id="oraclePool" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="jmsPooledConnectionFactory"/>
</bean>
... |