我是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>
它从transferFromMessageStore(一个队列)中检索一些元素(XML 文档)并将这个对象传递给使用它的transferProcessorSequence.xml序列。正如您在此时看到的,我已经实现了一个自定义消息处理器SamplingProcessorHeaderRateLimit,它只是扩展了org.apache.synapse.message.processor.impl.sampler.SamplingProcessor WSO2 类。此时它仅在执行init()方法时显示日志。我将它部署在我的 Carbon 服务器上,它可以工作。
在这里您可以找到整个项目代码。
好的,但据我了解,为了获得所需的行为,我不必简单地扩展SamplingProcessor类,因为为了在每个消息消费和发送到序列之间进行自定义实现,需要扩展SamplingService类,这个类。
我认为我需要覆盖execute()或fetch(MessageConsumer msgConsumer)。
此时应该可以插入一个日志,每次从消息存储中检索一个元素并且在执行与消息处理器相关的序列之前写入日志文件的内容。
可能吗?
所以我的主要主要问题是:
1)我是否必须创建一个类,将SamplingService类扩展到我正在实现自定义消息处理器的同一个项目中(此行为只能用于我的 WSO2 ESB 项目中的这个特定消息处理器,所有其他消息处理器使用在这个项目中必须使用标准的 SamplingService 实现)。
2)另一个疑问与此自定义SamplingService实现如何传递给我的自定义消息处理器有关。进入 SamplingProcessor WSO2 类(如何将特定的自定义消息处理器实现与处理其生命周期的自定义 SamplingService 实现相关联)。