【问题标题】:Apache Camel: Can I use @Produce without specifying the endpoint uri in the annotation?Apache Camel:我可以在注释中不指定端点 uri 的情况下使用 @Produce 吗?
【发布时间】:2016-11-15 22:11:28
【问题描述】:

骆驼documentation中提到我们可以使用@Produce注解注入ProducerTemplate,如下图所示。

 @Produce(uri = "activemq:foo")
    private ProducerTemplate producer;

我想知道是否可以不在注释中指定 uri 并在其 sendBody 方法中将 uri 传递给生产者,如下所示,以便我可以在 Util 类中使用它来生成任何端点?

public class JmsProducerUtils {
    @Produce
    private ProducerTemplate producer;

    public void publishMessageToEndpoint(String endpoint, String message) {

        producer.sendBody(endpoint, message);
    }
}

在这样使用它时有什么需要注意的问题吗?

【问题讨论】:

  • 添加为评论,因为它间接回答了您的问题。您可以制作实用程序 CamelContextAware,然后使用 CamelContext 获取生产者。然后像在示例中一样调用 sendBody。

标签: java annotations apache-camel jms


【解决方案1】:

好吧,不用担心,它肯定可以工作——你可以编写一个简单的单元测试来验证它——但除非你的 URI 是在运行时动态形成的,否则我建议使用他们在文档中提到的方法,例如有一个接口:

@InOnly
public class JmsProducer {
  void publish(String message);
}

然后像这样将它注入你的类中:

public class Foo {
  @Produce(uri = "activemq:foo")
  private JmsProducer fooProducer;

  @Produce(uri = "activemq:bar")
  private JmsProducer barProducer;
}

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2017-04-15
    • 2014-07-23
    • 2021-05-21
    • 2013-01-07
    • 2016-02-01
    • 2012-08-04
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多