我是 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服务器上,它可以工作。
Here您可以找到整个项目代码。
好的但是从我所理解的获得所需的行为我不得简单地扩展 SamplingProcessor 类,因为为了在每个消息消耗和调度序列之间进行自定义实现,需要扩展类 SamplingService 类,此one。
我认为我需要覆盖执行()或获取(MessageConsumer msgConsumer)。
此时应该还可以插入一个日志,每次从消息存储库中检索到一个元素时都会写入日志文件,然后再执行与消息处理器相关的序列。
有可能吗?
所以我的主要主要是:
1)我是否要创建一个将 SamplingService 类扩展到我实现自定义消息处理器的同一项目中的类(此行为必须仅用于此特定消息在我的WSO2 ESB项目中,该项目中使用的所有其他消息处理器都必须使用标准的SamplingService实现。)
2)另一个疑问与此自定义 SamplingService 实现如何传递到我的自定义消息处理器有关。进入SamplingProcessor WSO2类(如何将特定的自定义消息处理器实现与处理其生命周期的自定义SamplingService实现相关联)。
答案 0 :(得分:1)
1) Have I to create a class extending the SamplingService class into the same project in which I am implementing my custom message processor (this behavior have to be used only for this specific message processor in my WSO2 ESB project, all the other message processor used in this project have to use the standard SamplingService implementation).
您的自定义SamplingProcessorHeaderRateLimitation
将仅使用传入transferFromMessageStore
的邮件,并将其消费和处理的邮件注入序列transferProcessorSequence
。此消息处理器不会处理所有其他路径。
2) Another doubt is related about how this custom SamplingService implementation is passed to my custom message processor. Into the the SamplingProcessor WSO2 class (how to associate a specific custom message processor implementation with a custom SamplingService implementation handling its lifecycle).
如果您查看自己实施的源代码SamplingProcessorHeaderRateLimitation.getTask()
,您已将自定义SamplingService2
与自定义SamplingProcessorHeaderRateLimitation
绑定
@Override
protected Task getTask() {
logger.info("getTask() START");
System.out.println("getTask() START");
logger.info("getTask() END");
System.out.println("getTask() END");
return (Task) new SamplingService2(this, synapseEnvironment, CONCURRENCY, SEQUENCE, isProcessorStartAsDeactivated());
}
答案 1 :(得分:0)
您是否在XML中配置了任务?
<task name="CheckPrice" class="org.wso2.esb.tutorial.tasks.PlaceStockOrderTask">
<trigger interval="5000"/>
</task>
或
<task name="CheckPrice" class="org.wso2.esb.tutorial.tasks.PlaceStockOrderTask">
<trigger interval="5000" count="10"/>
</task>
答案 2 :(得分:0)
<强> Q1:强>
我是否要创建一个将SamplingService类扩展为的类 我正在实现我的自定义消息处理器的同一个项目 (此行为必须仅用于此特定消息 我的WSO2 ESB项目中的处理器,使用的所有其他消息处理器 在这个项目中必须使用标准的SamplingService 实现)。
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
自定义处理器和服务仅在指定为处理器类时使用,如上例所示。
<强> Q2:强>
另一个疑问是关于这个自定义SamplingService的方式 实现传递给我的自定义消息处理器。进入了 SamplingProcessor WSO2类(如何关联特定的自定义 消息处理器实现与自定义SamplingService 处理其生命周期的实现。)
您可以直接扩展/实现ScheduledMessageProcessor而不是SamplingProcessor,因为它只在init()方法中实现getTask()和初始化视图对象。 此外,您的SamplingService2类应扩展Task,ManagedLifecycle接口。