2016-06-13 44 views
0
<setHeader headerName="smsRecivers"><simple>{{reciversList}}</simple></setHeader> 

我有一個列表手機號碼(以逗號分隔形式reciversList = 999999999,88888888,799999999),我有互送短信,通過reciversList列表循環我怎樣才能環路Apache的駱駝

一些像

<loop on="reciversList"> 
    // so some work 
</loop> 

我看着循環功能,它有一個常數。

回答

1

您可以使用http://camel.apache.org/loop.html

<route> 
    <setHeader headerName="smsRecivers"> 
    <simple>{{reciversList}}</simple> 
    </setHeader> 
    <loop> 
    <simple>${in.header.smsRecivers.size}</simple> 
    ..... 
    </loop> 
</route> 

內部循環體你可以得到由索引列表的項目,使用excange財產CamelLoopIndex,也可以使用自定義增量指數( 可以在其他計算標題)。

2

如果您想要在報頭值而不是消息正文上拆分,可以使用Camel Splitter EIP並編寫自己的方法來處理拆分。

你的路線將是這個樣子:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="direct:start"/> 
     <split> 
      <method ref="splitterBean" method="split"/> 
      Process each SMS here 
     </split> 
    </route> 
</camelContext> 

然後你可以使用MySplitterBean例如在Apache分離器頁面,並寫出像這樣的方法:

public List<Message> split(@Header(value = "smsReceivers") String header, @Body String body) { 
    List<Message> answer = new ArrayList<Message>(); 
    // Perform header null checking here 
    header = header.substring(header.indexOf("=")+1); // Remove var name 
    String[] parts = header.split(","); 
    for (String part : parts) { 
     DefaultMessage message = new DefaultMessage(); 
     message.setHeader("smsReceiver", part); 
     message.setBody(body); 
     answer.add(message); 
    } 
    return answer; 
} 

在循環,您可以通過「smsReceiver」標題簡單地訪問SMS號碼。