我不得不問駱駝路由行爲,這是愚蠢的(但很容易理解)邏輯描述。 在主要主題 - 我需要將信息從一個路由的交換頭部推送到另一個路由。 這是關於CMDB系統和監控工具zabbix。 那麼,在第一次我有可能在CMDB切換CI狀態的路線:Apache駱駝:從交換頭到另一個路由的數據
<route>
<description> route catching CI ID in jms queue, check it on exist and switch CI state to incident
</description>
<from uri="jms:switchCIStateQueue"/>
<filter>
<simple>${body} regex '[\d]+'</simple>
<to uri="bean:otrsCIApi?method=getCIBodyByID(${body})"/>
<filter>
<simple>${body} regex '\{.+?\}'</simple>
<marshal>
<json library="Jackson"/>
</marshal>
<unmarshal>
<json library="Jackson" unmarshalTypeName="ts.team.otrs.ci.OtrsCI"/>
</unmarshal>
<to uri="bean:otrsCIApi?method=switchOTRSCIState(${body})"/>
</filter>
</filter>
</route>
它的工作好,但我必須從另外的路線,這有很多的檢查,過濾器和選擇使用這個動作。 我的問題是,我沒有一個身份證件身份(但保持在標題)在主要邏輯路線的深度。
<route>
<description>Route catch triggerid
and creates a ticket in OTRS, link it to host
</description>
<from uri="direct:zab_trig_2_otrs_tick"/>
<to uri="bean:zabbixApi?method=getTriggerByID(body)"/>
<filter>
<simple>${body} regex '\{.+?\}'</simple>
<marshal>
<json library="Jackson"/>
</marshal>
<unmarshal>
<json library="Jackson" unmarshalTypeName="ts.team.zabbix.trigger.SingleTrigger"/>
</unmarshal>
<setHeader headerName="ZabbixTrigger" id="_setZabbixTrigger">
<simple>${body}</simple>
</setHeader>
<!-- search CI in OTRS -->
<to uri="bean:otrsCIApi?method=searchCI(${body.getHosts().get(0).getName()})"/>
<!-- Array of CI ID like [] or ["1"] -->
<split streaming="true">
<simple>${body}</simple>
<!-- place it in header-->
<setHeader headerName="HostID">
<simple>${body}</simple>
</setHeader>
<to uri="bean:otrsLinkApi?method=ListLinkedTicketsTitleFiltered(${body},${header.ZabbixTrigger.getDescription()})"/>
<!-- return JSONArray with State=open otrs Tickets ID -->
<choice>
<when id="ticketslist_empty">
<simple>${body} == ''</simple>
<!-- Create ticket, connect it to host in OTRS -->
<to uri="bean:otrsTicketApi?method=createNewTicket(${header.ZabbixTrigger.getDescription()},${header.ZabbixTrigger.getPriority()})"/>
<!-- return body body with ticket id, create link with ${header.HostID} -->
<to uri="bean:otrsLinkApi?method=LinkAdd(${header.HostID},${body})"/>
<!-- Here i need to switch CI state if incident priority is higher than 3(Normal)-->
<when>
<simple>${header.ZabbixTrigger.getPriority()} > 3</simple>
<!-- here i need to send ${header.HostID} to previous described route (jms:switchCIStateQueue)-->
</when>
</when>
</choice>
</split>
</filter>
</route>
因此,有一塊這條路線的:
<when>
<simple>${header.ZabbixTrigger.getPriority()} > 3</simple>
<!-- here i need to send ${header.HostID} to previous described route (jms:switchCIStateQueue)-->
</when>
,我需要從我的頭髮送一些信息給JMS:switchCIStateQueue(或途徑直接,這是無論在哪裏)。 我希望,我對問題的描述很全面和簡單。
不幸的不是:)什麼是問題?什麼阻止你把$ {header.HostID}放到$ {body}中,正如「前面描述的路由」所預計的那樣?或者相反,不要從$ {body}中獲取CID,而要從該路由中的標題中獲取CID? – Vadim
@Vadim,謝謝你的評論。我很抱歉在我的描述中如此粗魯。主要問題是什麼 - 我需要將CIID推入第一個描述的路線。我抓不住,我怎麼能把它做到我的大路上。原因需要將CIID放在標題$ {header.HostID}中而不是正文。我如何將$ {header.HostID}放入正文? – smartydoc
我的意思是,我不知道正確的方式將信息從$ {header.HostID}放置到jms:switchCIStateQueue。如果你有一些想法,我會很樂意閱讀它:) – smartydoc