我如何申报和使用"全球财产"在WSO2 ESB? (超出消息处理器定义的序列的属性)

时间:2017-07-12 10:43:04

标签: wso2 wso2esb esb

我怀疑如何在 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 ),存储我获得的值是非常重要的。序列由消息处理器再次执行)。我可以做吗?另一个解决方案可能是将这个日期存储在数据库中,但是,如果可能的话,我更喜欢使用类似全局属性的东西。

1 个答案:

答案 0 :(得分:2)

您可以在序列中使用此javascript:

{
    "homeMobileCountryCode": 242,
    "homeMobileNetworkCode": 1,
    "radioType": "gsm",
    "considerIp": "false",
    "cellTowers": {
        "cellId": 41010,
        "locationAreaCode": 2862,
        "mobileCountryCode": 242,
        "mobileNetworkCode": 1
    }
}