Apache Camel中setHeader和setProperty的用途是什么?

u4dcyp6a  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(316)

对不起,我是Camel的新手。查看这两个方法的文档,没有任何有意义的指示说明何时需要使用这两个方法。
例如,setProperty()请参阅https://camel.apache.org/components/3.4.x/eips/setProperty-eip.html
我没有看到任何属性方法,除了设置和删除它们。这有什么意义?同样的头,你可以设置它们,但不知道如何获得它们。

41ik7eoe

41ik7eoe1#

对不起,我是Camel的新手。查看这两个方法的文档,没有任何有意义的指示说明何时需要使用这两个方法。
若要了解何时要使用这些方法,您需要了解 HeadersProperties 之间的区别。
org.apache.camel.Message-基本实体,包含Camel中传送和路由的数据。
消息是系统在使用消息传送通道时用来相互通信的实体。消息是单向流动的,即从发送方流向接收方。
Messages具有主体(有效负载)、***报头***和可选附件。

  • 标头是与邮件关联的值,如发件人标识符、有关内容编码的提示、身份验证信息等。
  • 标头是名称-值对;该名称是唯一的、不区分大小写的字符串,值的类型为java. lang. Object。
  • Camel对标头的类型没有任何约束。
  • 对消息中包含的头的大小或头的数量也没有限制。
  • 标头作为Map存储在消息中。

消息还可以包含可选附件,这些附件通常用于Web服务和电子邮件组件。
org.apache.camel.Exchange-Camel中的交换是消息在路由过程中的容器。交换还为系统之间的各种类型的交互提供支持,也称为消息交换模式(MEP)。请在此处阅读更多有关MEP的信息。
Camel exchange具有ID、MEP、异常和***属性***。它还具有用于存储传入消息的in消息和用于存储回复的out消息。

  • 属性类似于邮件头,但它们在整个交换期间都有效。
  • 属性用于包含全局级别的信息,而消息头则特定于特定消息。
  • Camel本身在路由过程中向交换添加了各种属性。
  • 作为开发人员,您可以在交换生存期内的任何时间点存储和检索属性。

因此,有了这种理解-现在根据您的用例,您需要决定是否将“类型”(即,您要保存的值)保存在Headers或Properties中。
我没有看到任何属性方法,除了设置和删除它们。这有什么意义?同样的头,你可以设置它们,但不知道如何获得它们。
若要检索头或属性,请使用以下方法之一

  1. Simple expression language
  2. Header language
  3. Exchange language
  4. Bind language
    也许有更多的方法,但这些相当多和广泛使用(至少由我!)。
    更新:您可以从Simple中使用exchangeProperties访问已设置的exchange属性,下面是一些示例,
from("seda:updateCustomer").routeId("update-customers-details")
    .setProperty("customerId").simple("${header.customerId}")
    .setProperty("requestBody").body()
    .setProperty("someConstant").constant(123)
    // You can access the properties with exchangeProperty method using simple language 
    .log(LoggingLevel.INFO, "Value of customerId from exchange: ${exchangeProperty.customerId}")
    .log(LoggingLevel.INFO, "Request body saved in exchange: ${exchangeProperty.requestBody}")
    .log(LoggingLevel.INFO, "Value of someConstant in exchange: ${exchangeProperty.someConstant}")
    .log(LoggingLevel.INFO, "Value of exchangeId: ${exchangeId}")
    .log(LoggingLevel.INFO, "Value of entire exchange: ${exchange}")
    ..
    ..

来源:https://livebook.manning.com/book/camel-in-action-second-edition/chapter-1/

vu8f3i0k

vu8f3i0k2#

头(.setHeader)通常在发送消息到其他需要它们的组件/系统时设置,如Message Broker、JMS、Web服务、HTTP、FTP服务器等。大多数Camel组件默认转发所有的交换头。假设你在头中有敏感数据,它会被传播!
Exchange Properties(.setProperty)可用于保存您在Exchange生命周期中可能需要的数据,而不必担心将它们的值传播到其他系统。
例如,在HTTP请求中,您必须定义一个方法(GET、POST等),很可能是一个头。因此,将其设置为头是有意义的!另一方面,从该调用中检索到的数据可能会“保存”在一个属性中,以便在路由步骤中轻松重用。

相关问题