如何使用自动配置的生产者模板获取多个不同的ProducerTemplate实例?

时间:2018-11-29 20:01:22

标签: apache-camel

如何使用自动配置的生产者模板获取多个不同的ProducerTemplate实例?如果我使用自动配置的ProducerTemplate,如何获得多个不同的ProducerTemplate实例?

例如,我需要使用producertemplate将不同的交换发送到不同的端点。在这种情况下,是否需要其他生产者模板实例?如果是这样,我该怎么办?

  

自动配置的消费者和生产者模板
  骆驼自动配置提供了预先配置的ConsumerTemplate和ProducerTemplate实例。您可以将它们简单地注入到Spring管理的bean中:

@Component
public class InvoiceProcessor {    
  @Autowired
  private ProducerTemplate producerTemplate;

  @Autowired
  private ConsumerTemplate consumerTemplate;
  public void processNextInvoice() {
    Invoice invoice = consumerTemplate.receiveBody("jms:invoices", Invoice.class);
    ...
    producerTemplate.sendBody("netty-http:http://invoicing.com/received/" + invoice.id());
  }
}  

1 个答案:

答案 0 :(得分:1)

您不需要仅将不同的ProducerTemplate发送消息到不同的端点。但是,这可能很方便。

将消息发送到任何端点

使用ProducerTemplatesend*(InOnly)和request*(InOut)方法,这些方法将目标端点URI作为第一个参数。

template.sendBody("activemq:MyQueue", "<hello>world!</hello>");
template.requestBody("direct:MyEndpoint", "<hello>world!</hello>");

注入多个带有骆驼注释的ProducerTemplate

有关详细信息,请参见Camel docs about this

@EndpointInject(uri = "activemq:MyQueue")
protected ProducerTemplate myQueueProducer;
@EndpointInject(uri = "direct:MyEndpoint")
protected ProducerTemplate myEndpointProducer;

自动连接多个ProducerTemplate(春季)

由于要使用同一类型的多个实例,因此必须使用@Qualifier批注按名称注入它们。最好在您的Spring Bean配置中配置默认​​端点,我刚刚添加了setDefaultEndpointUri调用以展示如何执行此操作。

@Autowired
@Qualifier("myQueueProducer")
protected ProducerTemplate myQueueProducer;
@Autowired
@Qualifier("myEndpointProducer")
protected ProducerTemplate myEndpointProducer;
...
myQueueProducer.setDefaultEndpointUri("activemq:MyQueue")
myEndpointProducer.setDefaultEndpointUri("direct:MyEndpoint")