簡體   English   中英

Apache Camel:從消息正文中提取隊列名稱

[英]Apache Camel : extract to-queue name from message body

我有一個要求,我必須向 Microsoft Teams 發送消息。 我正在嘗試從從隊列接收到的消息中提取“到”通道名稱信息,並根據通道名稱,我從屬性文件中讀取它的 url 並發送消息。 下面是代碼。

    RouteDefinition from = from("jms:queue:teamsq?connectionFactory=artemis");
    from.setHeader("Exchange.CONTENT_TYPE", constant("application/json"));
    final StringBuffer channelName = new StringBuffer();
    from.process(exchange -> {
        String[] dataArray = exchange.getIn().getBody(String.class).split(",", 2);
        channelName.append(dataArray[0]);
        exchange.getIn().setBody("{\"text\" : \"" + dataArray[1].trim() + "\"}");
    })
    .log("Body is : " + channelName + " : ${body}");

記錄正文時,channelName 的值為 null。

有什么幫助我怎樣才能在這個 process() 方法之外獲得 channelName 的值?

從隊列收到的消息是

channel1, This is test a message 5

提前致謝。

您可以設置消息 header 或 Exchange 屬性 兩者都是在路由處理期間使用的消息變量。

.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())

主要區別在於 Exchange 屬性位於 Camel Exchange 上,而郵件標頭是郵件本身的一部分。

Camel Exchange 是消息的 Camel 包裝器 它在消息進入路由時創建,並在路由結束時被丟棄。

交換屬性:

  • 僅在駱駝路線處理期間可用
  • 永遠不會發送到其他系統
  • 僅在內存中

消息頭:

  • 每當路由路由到另一個系統時,都會轉換為目標系統的消息頭
  • 因此被發送到其他系統
  • 發送到另一個系統時被序列化

如果您將消息從 Camel 路由發送到 JMS 隊列並從另一個路由使用它,則 Exchange 屬性不再可用,而消息頭仍然存在。

但是,如果您路由到直接端點(Camel 內存中端點),則整個 Exchange 都會被傳輸,並且Exchange 屬性仍然可用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM