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 的值为空。
任何帮助我如何在此 process() 方法之外获取 channelName 的值?
从队列收到的消息是
channel1, This is test a message 5
提前致谢。
您可以设置消息header或交换属性。两者都是在路由处理期间使用的消息变量。
.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于 Exchange 属性位于 Camel Exchange 上,而消息 header 是消息本身的一部分。
Camel Exchange 是消息的 Camel 包装器。它在消息进入路由时创建,在路由结束时被丢弃。
交换属性:
- 仅在 Camel 路由处理期间可用
- 从未发送到其他系统
- 只有in-memory
留言header秒:
- 每当路由路由到另一个系统时,都会为目标系统转换为消息 headers
- 因此发送到其他系统
- 发送到另一个系统时被序列化
如果您从 Camel 路由向 JMS queue 发送消息并从另一个路由使用它,则 Exchange 属性不再可用,而消息 header 仍然存在。
但是,如果您路由到 直接端点(Camel in-memory 端点),整个 Exchange 将被转移并且 Exchange 属性仍然可用.
我有一个要求,我必须向 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 的值为空。
任何帮助我如何在此 process() 方法之外获取 channelName 的值?
从队列收到的消息是
channel1, This is test a message 5
提前致谢。
您可以设置消息header或交换属性。两者都是在路由处理期间使用的消息变量。
.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于 Exchange 属性位于 Camel Exchange 上,而消息 header 是消息本身的一部分。
Camel Exchange 是消息的 Camel 包装器。它在消息进入路由时创建,在路由结束时被丢弃。
交换属性:
- 仅在 Camel 路由处理期间可用
- 从未发送到其他系统
- 只有in-memory
留言header秒:
- 每当路由路由到另一个系统时,都会为目标系统转换为消息 headers
- 因此发送到其他系统
- 发送到另一个系统时被序列化
如果您从 Camel 路由向 JMS queue 发送消息并从另一个路由使用它,则 Exchange 属性不再可用,而消息 header 仍然存在。
但是,如果您路由到 直接端点(Camel in-memory 端点),整个 Exchange 将被转移并且 Exchange 属性仍然可用.