Я новичок в WSO2 ESB, и у меня есть специальный обработчик сообщений с этим конкретным поведением: выполнить операцию после того, как элемент будет извлечен из хранилища сообщений и до последовательность, относящаяся к этому процессору сообщений, выполняется.
Я попытаюсь объяснить это подробно.
Это мое определение процессора сообщений ESB:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
Он извлекает некоторые элементы (документы XML) из transferFromMessageStore (очередь) и передает этот объект в последовательность transferProcessorSequence.xml, которая его использует. Как вы можете видеть, в это время я внедрил обработчик пользовательских сообщений SamplingProcessorHeaderRateLimit, который просто расширяет класс org.apache.synapse.message.processor.impl.sampler.SamplingProcessor WSO2, В это время он показывает только журнал, когда выполняется init(). Я развернул его на своем сервере Carbon, и он работает.
Здесь вы можете найти весь код проекта.
Хорошо, но из того, что я понял, чтобы получить желаемое поведение, мне не нужно просто расширять класс SamplingProcessor, потому что для выполнения пользовательской реализации между каждым потреблением сообщений и отправкой в последовательность необходимо расширьте класс SamplingService, этот один.
Я думаю, что мне нужно переопределить execute() или выборку (MessageConsumer msgConsumer).
В это время должно быть хорошо также вставить журнал, который записывается в файл журнала каждый раз, когда элемент извлекается из хранилища сообщений, и до этого выполняется последовательность, относящаяся к процессору сообщений.
Возможно ли это?
Итак, мои основные главные сомнения:
1) Мне нужно создать класс, расширяющий класс SamplingService в тот же проект, в котором я реализую свой обработчик сообщений (. Это поведение должно использоваться только для этого конкретного сообщения процессор в моем проекте ESO WSO2, все другие обработчики сообщений, используемые в этом проекте, должны использовать стандартную реализацию SamplingService).
2) Еще одно сомнение связано с тем, как эта пользовательская реализация SamplingService передается моему настраиваемому процессору сообщений. В класс SamplingProcessor WSO2 (, как связать конкретную реализацию пользовательского процессора сообщений с пользовательской реализацией SamplingService, обрабатывающей жизненный цикл).