如何在每个任务调用

时间:2016-04-12 07:07:33

标签: wso2 wso2esb

我使用WSO2 ESB计划任务从外部系统获取数据,该任务每隔5秒调用我的代理服务。在我的代理服务中,我使用了属性名称“startTime”和“endTime”,这意味着我想从“startTime”获取数据到“endTime”。每次任务调用时,“startTime”和“endTime”应增加5秒。 但似乎ESB无法在每个任务调用之间存储这些属性(startTime和endTime)。我尝试使用脚本编写“startTime”:

importPackage(Packages.org.apache.synapse.config);  
var id = mc.getProperty("id");
var res = "conf/data_task/"+id ;
var startTimeInReg = mc.getProperty("_endTime");
mc.getConfiguration().getRegistry().updateResource(res+"/startTime", startTimeInReg.toString());

得到它

<property expression="get-property('registry', fn:concat('conf/data_task/',get-property('id'),'/startTime'))"
    name="startTimeInReg" scope="default" type="STRING"/>

我可以获得“startTime”,但它保持相同的值,我发现在调度任务调用2次或3次后(可能超过15秒),startTime的值会发生变化。

我认为这可能是由ESB缓存引起的,我如何在调用updateResource方法后立即提交更改startTime值。或者如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

尝试在治理注册表中保存您的价值:

mc.getConfiguration().getRegistry().newResource("gov:/trunk/test/MyCounter.txt",false); // create the resource the 1st time, does nothing the others
mc.getConfiguration().getRegistry().updateResource("gov:/trunk/test/MyCounter.txt", startTimeInReg.toString()); 

另一个解决方案,看看这个创建“全局”计数器的示例(在重新启动ESB时丢失):

<script language="js"><![CDATA[                         
    var curValue = mc.getEnvironment().getServerContextInformation().getProperty("MyCounter");
    if (curValue == null) {             
        curValue = 0;           
    } else {
        curValue++;
    }
    mc.getEnvironment().getServerContextInformation().addProperty("MyCounter",curValue);
    mc.setProperty("MyCounter",curValue);
]]></script>