【问题标题】:Camel - How do we set a property using producer template?Camel - 我们如何使用生产者模板设置属性?
【发布时间】:2022-03-24 21:02:42
【问题描述】:

有没有办法使用生产者模板设置骆驼交换属性?

想象一个接收客户订单的休息端点(还没有骆驼路线)。使用生产者模板,我想

  1. 在交易所设置customer-id 属性。
  2. 稍后在路线需要时使用它

是的,我也可以在使用生产者模板时使用标头并使用 producerTemplate.sendBodyWithHeaders,但我正在考虑使用属性而不是标头,因为这就是属性的含义 - 路由内的元数据与标头更多元数据与外部世界通信。 Customer-Id 对我来说在路线之外没有任何意义。

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    为此,您可以在现有交换器上设置属性,然后将其传递给接受交换器参数的 producerTemplate.send() 重载方法之一:

    exchange.setProperty("propertyname", "propertyval");
    producerTemplate.send("my-endpoint", exchange);
    

    【讨论】:

    • 谢谢。但是你会从哪里得到交换呢?我们只创建一个吗?像“新的 DefaultExchange(camelContext)”?
    • 是的,比如 new DefaultExchange(camelContext)
    • 只是想给你一个快速的提示,我添加了一个关于你的答案。谢谢你有用的指点!
    【解决方案2】:

    java-addict301answer 很有帮助,但由于我花了一些时间来弄清楚如何发送带有自定义属性 正文的交换,我想我会分享我的解决方案:

    producerTemplate.sendBodyAndProperty(myCustomBody, "customer-id", 42);
    

    sendBodyAndProperty 方法有几个可用的覆盖,a.o.发送到特定端点(URI)。为了获得更多的可定制性,您还可以使用:

    producerTemplate.send("my-endpoint", exchange -> {
          exchange.setProperty("customer-id", 42);
          exchange.getIn().setBody(myCustomBody);
        });
    

    这是基于 sendBody 在 Camel 中的实现。当然,这个 (i) 消除了创建您自己的 Exchange 的需要,并且 (ii) 可以在需要时轻松地通过交换执行其他自定义操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 2021-04-22
      • 2023-03-31
      • 1970-01-01
      • 2013-08-30
      • 2019-10-06
      • 2011-01-08
      • 1970-01-01
      相关资源
      最近更新 更多