Java ApacheCamel:从消息体提取到队列名称

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

我需要向Microsoft团队发送消息。 我试图从我从队列收到的消息中提取“to”频道名称信息,并根据频道名称,从属性文件中读取它的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

提前感谢。

您可以设置邮件标题或Exchange属性。两者都是在路由处理过程中使用的消息变量

.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于,交换属性位于Camel交换上,而消息头是消息本身的一部分

骆驼交换是消息的骆驼包装。它是在消息进入路由并在路由结束时丢弃时创建的

交换属性:

  • 仅在骆驼路线处理期间可用
  • 从未发送到其他系统
  • 只是在记忆中
消息头:

  • 每当路由执行到另一个系统的路由时,都会转换为目标系统的消息头
  • 因此被发送到其他系统
  • 在发送到另一个系统时序列化
如果将消息从驼峰路由发送到JMS队列,并从另一个路由使用它,则当消息头仍然存在时,Exchange属性不再可用


但是,如果您路由到一个直接端点(内存中的骆驼端点),则整个交换将被传输,并且交换属性仍然可用

您可以设置消息头或交换属性。两者都是在路由处理过程中使用的消息变量

.setHeader("channelName", channelName.toString())
.setProperty("channelName", channelName.toString())
主要区别在于,交换属性位于Camel交换上,而消息头是消息本身的一部分

骆驼交换是消息的骆驼包装。它是在消息进入路由并在路由结束时丢弃时创建的

交换属性:

  • 仅在骆驼路线处理期间可用
  • 从未发送到其他系统
  • 只是在记忆中
消息头:

  • 每当路由执行到另一个系统的路由时,都会转换为目标系统的消息头
  • 因此被发送到其他系统
  • 在发送到另一个系统时序列化
如果将消息从驼峰路由发送到JMS队列,并从另一个路由使用它,则当消息头仍然存在时,Exchange属性不再可用


但是,如果您路由到直接端点(内存中的骆驼端点),则整个交换将被传输,交换属性仍然可用

谢谢。这很有帮助。虽然没有像getheer()之类的直接方法来提取这个标题,但是通过使用choice()和comparison,我找到了解决方法谢谢。这很有帮助。虽然没有像getheer()之类的直接方法来提取这个头文件,但是通过使用choice()和comparison,我找到了解决方法