Java ApacheCamel:从消息体提取到队列名称
我需要向Microsoft团队发送消息。 我试图从我从队列收到的消息中提取“to”频道名称信息,并根据频道名称,从属性文件中读取它的url并发送消息。下面是代码Java ApacheCamel:从消息体提取到队列名称,java,apache-camel,quarkus,Java,Apache Camel,Quarkus,我需要向Microsoft团队发送消息。 我试图从我从队列收到的消息中提取“to”频道名称信息,并根据频道名称,从属性文件中读取它的url并发送消息。下面是代码 RouteDefinition from = from("jms:queue:teamsq?connectionFactory=artemis"); from.setHeader("Exchange.CONTENT_TYPE", constant("application
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
提前感谢。您可以设置邮件标题或Exchange属性。两者都是在路由处理过程中使用的消息变量
.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于,交换属性位于Camel交换上,而消息头是消息本身的一部分
骆驼交换是消息的骆驼包装。它是在消息进入路由并在路由结束时丢弃时创建的
交换属性:
- 仅在骆驼路线处理期间可用
- 从未发送到其他系统
- 只是在记忆中
- 每当路由执行到另一个系统的路由时,都会转换为目标系统的消息头
- 因此被发送到其他系统
- 在发送到另一个系统时序列化
但是,如果您路由到一个直接端点(内存中的骆驼端点),则整个交换将被传输,并且交换属性仍然可用您可以设置消息头或交换属性。两者都是在路由处理过程中使用的消息变量
.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于,交换属性位于Camel交换上,而消息头是消息本身的一部分
骆驼交换是消息的骆驼包装。它是在消息进入路由并在路由结束时丢弃时创建的
交换属性:
- 仅在骆驼路线处理期间可用
- 从未发送到其他系统
- 只是在记忆中
- 每当路由执行到另一个系统的路由时,都会转换为目标系统的消息头
- 因此被发送到其他系统
- 在发送到另一个系统时序列化
但是,如果您路由到直接端点(内存中的骆驼端点),则整个交换将被传输,交换属性仍然可用谢谢。这很有帮助。虽然没有像getheer()之类的直接方法来提取这个标题,但是通过使用choice()和comparison,我找到了解决方法谢谢。这很有帮助。虽然没有像getheer()之类的直接方法来提取这个头文件,但是通过使用choice()和comparison,我找到了解决方法