我怀疑如何在 WSO2 ESB 中存储类似全局属性的内容。我试着解释一下我的情况。
我有一个消息处理器,其中定义了一个每秒执行一次的序列,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<messageProcessor class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" messageStore="glisMessageStore" name="glisMessageProcessor" targetEndpoint="glisEndpoint" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="client.retry.interval">100</parameter>
<parameter name="max.delivery.attempts">4</parameter>
<parameter name="member.count">1</parameter>
<parameter name="message.processor.reply.sequence">glisResponseSequence</parameter>
<parameter name="max.delivery.drop">Disabled</parameter>
<parameter name="interval">10</parameter>
<parameter name="is.active">true</parameter>
</messageProcessor>
在 glisResponseSequence.xml 中,我执行对外部Web服务的调用。在这个序列中,我必须做一些有点“怪异”的事情。
我必须做以下序列示意图中解释的事情:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="transferProcessorSequence" onError="transferFromErrorSequence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<log level="full"/>
..................................................................
..................................................................
..................................................................
1) RETRIEVE THE VALUE FROM A "GLOBAL PROPERTY" NAMED sleepingTime
2) IF sleepingTime != NULL PERFORM A JAVASCRIPT THAT USE THIS VALUE
3) CALL EXTERNAL WEB SERVICE:
<call>
<endpoint key="transferFromGLISAPI"/>
</call>
4) SET THE NEW VALUE OF THE sleepingTime "GLOBAL PROPERTY" (it is retrieved from the response header)
..................................................................
..................................................................
..................................................................
</sequence>
所以,在我的序列中,我有一个调用中介。在这个调用中介之后,我必须设置类似全局属性的东西,并从响应头中检索一个值(获取此值对我来说不是问题)。当调用中介之后,当消息处理器将再次执行此序列时,将再次使用此全局属性的值。
我该怎么办?我怀疑是:
1)我在哪里定义全局属性?我认为我必须在 glisResponseSequence.xml (由消息处理器执行的序列)之外声明它。我可以将它声明为另一个序列吗?
2)全局属性的正确范围是什么?
在我调用中介向外部Web服务执行http请求并在下次调用之前再次使用它时( glisResponseSequence.xml ),存储我获得的值是非常重要的。序列由消息处理器再次执行)。我可以做吗?另一个解决方案可能是将这个日期存储在数据库中,但是,如果可能的话,我更喜欢使用类似全局属性的东西。
答案 0 :(得分:2)
您可以在序列中使用此javascript:
{
"homeMobileCountryCode": 242,
"homeMobileNetworkCode": 1,
"radioType": "gsm",
"considerIp": "false",
"cellTowers": {
"cellId": 41010,
"locationAreaCode": 2862,
"mobileCountryCode": 242,
"mobileNetworkCode": 1
}
}