如何使用自动配置的生产者模板获取多个不同的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());
}
}
答案 0 :(得分:1)
您不需要仅将不同的ProducerTemplate
发送消息到不同的端点。但是,这可能很方便。
将消息发送到任何端点
使用ProducerTemplate的send*
(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")