2016-04-12 14 views
1

Dış sistemden veri almak için WSO2 ESB zamanlama görevini kullandım, görev her 5 saniyede bir proxy hizmetimi çağırır. Vekil sunucumda "startTime" ve "endTime" özelliklerinden birini kullandım, "startTime" dan "endTime" a kadar veri almak istiyorum. "startTime" ve "endTime" her görev çağrısında 5 saniye artar. Ancak, ESB bu özellikleri her görev çağrısı arasında saklayamaz (startTime ve endTime). Ben "startTime" yazmak için komut dosyası kullanmayı deneyin:Her görev çağrısı arasında özellik değeri nasıl yedeklenir

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()); 

ve almak o

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

elimden "startTime" olsun, ama aynı değeri kalır ve bunu buldum sonra 2 veya 3 kez zamanlama görevi çağrısı (belki 15 saniyeden fazla), startTime değerinin değeri.

Belki de ESB'nin önbelleğe alınmasının neden olabileceğini düşünüyorum, updateResource yöntemi çağrıldıktan hemen sonra startTime değerinin değiştirilmesini nasıl yapabilirim. Ya da bu sorunu nasıl çözebiliriz.

cevap

2

deneyin yönetim kayıt değerinizi kaydetmek için:

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()); 

bir diğer çözüm, (ESB yeniden başlatıldığında kayıp) "global" bir sayaç oluşturmak Bu örnek de bakabilirsiniz:

<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> 
+0

İkinci çözümle çalışabilir. Ancak ilk çözüm, ESB önbellek mekanizması nedeniyle değişiklik özelliğini birkaç saniye sonra elde edemiyor. – yeahliu

+0

Önbelleğe bazı veriler koymak için 1. çözümü kullanıyorum. Bu yüzden, değişikliklerin anında yerine geçmediğini fark ettin. –

İlgili konular