親愛的社區。Apache的駱駝:春天組播+處理
我試圖添加多播聚合策略在Spring配置XML以不同的方式,這是我在Apache論壇,計算器和其他很多從Java DSL轉換的發現。
東西我得到錯過了,你可以想,可以如何配置以獲取下面描述的情況的正確行爲。
我有一些名稱列表(所有的bean被正確定義),
<to id="_to85" uri="bean:otrsCIApi?method=ConfigItemNameList()"/>
那麼我就需要做一個電話後分割對方在兩個不同的系統:
<split streaming="true">
<simple>${body}</simple>
<!-- iterate in JsonArray -->
<choice>
<when>
<simple>${body} != ''</simple>
<multicast stopOnException="true" parallelProcessing="true" strategyRef="OtrsZabbixCiAggregationStrategy" >
<to uri="direct:zabbix_multicast"/>
<to uri="direct:otrs_multicast"/>
<to uri="log:jms_apachemq3"/>
</multicast>
<to id="_to92" uri="log:jms_apachemq4"/>
</when>
<when>
<simple>${body} == ''</simple>
</when>
</choice>
</split>
每個直接由具有後調用的方法,這是正常工作(並返回JSONObject.toString()):
<route>
<from uri="direct:zabbix_multicast"/>
<to uri="bean:zabbixApi?method=getHostBody(body)"/>
<to uri="log:multicast_zab1"/>
</route>
<route>
<from uri="direct:otrs_multicast"/>
<to uri="bean:otrsCIApi?method=searchCI(body)"/>
<to uri="log:multicast_otrs1"/>
<to uri="bean:otrsCIApi?method=getCIBodyByID(body)"/>
<to uri="log:multicast_otrs2"/>
</route>
聚合策略是非常簡單的,應該工作:
import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;
public class OtrsZabbixCiAggregationStrategy implements AggregationStrategy{
public Exchange aggregate(Exchange exchange1, Exchange exchange2) {
String body1 = exchange1.getIn().getBody().toString();
String body2 = exchange2.getIn().getBody().toString();
String merged = body1 + "," + body2;
exchange1.getIn().setBody(merged);
return exchange1;
}
}
那麼我就非常奇怪的輸出,如沒有聚集起:
[fc8135) thread #39 - Multicast] jms_apachemq3 INFO Exchange[ExchangePattern: InOnly, BodyType: String, Body: Zabbix server]
[fc8135) thread #37 - Multicast] multicast_zab1 INFO Exchange[ExchangePattern: InOnly, BodyType: String, Body: [{"available":"1","description":"","disable_until":"0","error":"","errors_from":"0","flags":"0","host":"Zabbix server","hostid":"10084","ipmi_authtype":"-1","ipmi_available":"0","ipmi_disable_until":"0","ipmi_error":"","ipmi_errors_from":"0","ipmi_password":"","ipmi_privilege":"2","ipmi_username":"","jmx_available":"0","jmx_disable_until":"0","jmx_error":"","jmx_errors_from":"0","lastaccess":"0","maintenance_from":"0","maintenance_status":"0","maintenance_type":"0","maintenanceid":"0","name":"Zabbix server","proxy_hostid":"0","snmp_available":"0","snmp_disable_until":"0","snmp_error":"","snmp_errors_from":"0","status":"0","templateid":"0","tls_accept":"1","tls_connect":"1","tls_issuer":"","tls_psk":"","tls_psk_identity":"","tls_subject":""}]]
[fc8135) thread #38 - Multicast] multicast_otrs1 INFO Exchange[ExchangePattern: InOnly, BodyType: com.alibaba.fastjson.JSONArray, Body: 2]
[fc8135) thread #38 - Multicast] multicast_otrs2 INFO Exchange[ExchangePattern: InOnly, BodyType: String, Body: {"ConfigItem":[{"CurInciState":"Operational","ConfigItemID":"2","InciStateType":"operational","CurInciStateType":"operational","Number":"1022000002","CreateBy":"2","LastVersionID":"2","DeplState":"Production","CurDeplState":"Production","CreateTime":"2016-11-01 13:47:44","DefinitionID":"1","VersionID":"2","DeplStateType":"productive","CIXMLData":{"SerialNumber":"","Ram":"","WarrantyExpirationDate":"2016-11-01","Vendor":"","CPU":"","Model":"","Owner":"","Type":"","HardDisk":{"HardDisk":"","Capacity":""},"GraphicAdapter":"","FQDN":"","OperatingSystem":"","Description":""},"Class":"Computer","InciState":"Operational","CurDeplStateType":"productive","Name":"Zabbix server"}]}]
[hread #32 - JmsConsumer[queue]] jms_apachemq4 INFO Exchange[ExchangePattern: InOnly, BodyType: String, Body: Zabbix server]
所以我希望身體與分裂兩個String JSON逗號(就像在聚合策略類中一樣),但是我只有body,它會發送到其他路由。
任何想法?
它真的幫助我,謝謝! 我剛剛加入 如果(Exchange1中== NULL){ 回報Exchange2中; } 並得到了妥善的身體上<以ID = 「_ TO92」 URI = 「日誌:jms_apachemq4」/>點。 – smartydoc