1

我有一个 Mule 流程,其中有一个会话变量“servicerequested”,这个变量可以有不同的值,例如 - customerservice、accountservice、transferservice 等。

有一个属性文件 mule.dev.properties,其中包含基于此服务选项的端口信息:

customerservice=9914 
accountservice=9918
transferservice=9919

我想要一个 http 出站端点根据变量 requestedservice 从此属性文件中选择端口。我尝试使用如下 MEL:

${#[header:session:servicerequested]}

<http:outbound-endpoint exchange-pattern="request-response" host="localhost" 
port="${#[header:session:servicerequested]}" path="services" method="GET"/>

但它抛出异常

Template Endpoint "http://localhost:session:servicerequested]/services" resolved 
into a Malformed endpoint "http://localhost:session:servicerequested]/services"

请让我知道我们如何使用 MEL 动态读取属性文件。

4

2 回答 2

0

从您的帖子中,我可以看到会话变量是从属性文件中选取值的条件。

但问题是一旦部署应用程序就会加载属性文件。但是会话变量仅在流程执行期间可用。

因此表达式 ${#[header:session:servicerequested]} 将不起作用,因为在引用属性文件以获取值时,#[MEL] 尚不可用。

可能的解决方案可能是将您的属性加载到一些流变量中,然后根据会话变量值选择这些流变量之一。

此外,这一切不可能发生在一个 MEL 语句中。

尝试将属性存储为流变量,如下所示

<set-variable variableName="prop1" value="${property key from properties file}" />
<set-variable variableName="prop2" value="${property key from properties file}" />

然后构建一个自定义组件或 groovy 来评估会话变量并选择一个流变量,然后在您的端口属性中使用该值。

希望这可以帮助 :)

于 2013-06-02T22:26:58.157 回答
0

您可以创建java组件并直接读取属性。这是最简单的解决方案。另一种方法是在 Spring 中配置 ReloadableResourceBundleMessageSource 来读取属性。

于 2014-10-07T11:38:15.563 回答