![](/img/trans.png)
[英]Apache camel: filter / throttle to take just the first message from a queue
[英]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.