37.3. 使用 Consumer 模板
概述
consumer 模板提供轮询消费者端点的方法,以接收传入的消息。您可以选择以交换对象形式或消息正文形式接收传入的消息(其中消息正文可以使用内置类型转换器)转换为特定类型的消息。
轮询交换示例
您可以使用消费者模板轮询消费者端点,以使用以下轮询方法之一进行交换:阻塞 receive ()
; receive ()
with a timeout; 或 receiveNoWait ()
,它会立即返回。由于消费者端点代表服务,因此在尝试轮询交换前,通过调用 start ()
来启动服务线程也很重要。
以下示例演示了如何使用 blocking receive ()
方法从 seda:foo
consumer 端点轮询交换:
import org.apache.camel.ProducerTemplate; import org.apache.camel.ConsumerTemplate; import org.apache.camel.Exchange; ... ProducerTemplate template = context.createProducerTemplate(); ConsumerTemplate consumer = context.createConsumerTemplate(); // Start the consumer service consumer.start(); ... template.sendBody("seda:foo", "Hello"); Exchange out = consumer.receive("seda:foo"); ... // Stop the consumer service consumer.stop();
其中,消费者模板实例 consumer
使用 CamelContext.createConsumerTemplate ()
方法进行实例化,并通过调用 ConsumerTemplate.start ()
来启动消费者服务线程。
轮询消息正文示例
您还可以使用以下方法之一为传入消息正文轮询消费者端点:block receiveBody ();
带有 timeout; 或 receiveBody ()
receiveBodyNoWait ()
,后者会立即返回。如上例中所示,在尝试轮询交换前,通过调用 start ()
来启动服务线程也很重要。
以下示例演示了如何使用 blocking receiveBody ()
方法从 seda:foo
consumer 端点轮询传入的消息正文:
import org.apache.camel.ProducerTemplate; import org.apache.camel.ConsumerTemplate; ... ProducerTemplate template = context.createProducerTemplate(); ConsumerTemplate consumer = context.createConsumerTemplate(); // Start the consumer service consumer.start(); ... template.sendBody("seda:foo", "Hello"); Object body = consumer.receiveBody("seda:foo"); ... // Stop the consumer service consumer.stop();
轮询交换的方法
从消费者端点进行轮询 交换 有三个基本方法: receive ()
没有无限期超时块;对于指定的毫秒内带有超时块的 receive ()
;而 receiveNoWait ()
是非阻塞的。您可以将消费者端点指定为端点 URI 或 Endpoint
实例。
Exchange receive(String endpointUri); Exchange receive(String endpointUri, long timeout); Exchange receiveNoWait(String endpointUri); Exchange receive(Endpoint endpoint); Exchange receive(Endpoint endpoint, long timeout); Exchange receiveNoWait(Endpoint endpoint);
轮询消息正文的方法
从消费者端点中轮询 消息正文 有三种基本方法: receiveBody ()
没有超时块;对于指定的毫秒内带有超时块的 receiveBody ()
;而 receiveBodyNoWait ()
是非阻塞性的。您可以将消费者端点指定为端点 URI 或 Endpoint
实例。此外,通过调用这些方法的模板形式,您可以使用内置的类型转换器将返回的正文转换为特定类型的 T
。
Object receiveBody(String endpointUri); Object receiveBody(String endpointUri, long timeout); Object receiveBodyNoWait(String endpointUri); Object receiveBody(Endpoint endpoint); Object receiveBody(Endpoint endpoint, long timeout); Object receiveBodyNoWait(Endpoint endpoint); <T> T receiveBody(String endpointUri, Class<T> type); <T> T receiveBody(String endpointUri, long timeout, Class<T> type); <T> T receiveBodyNoWait(String endpointUri, Class<T> type); <T> T receiveBody(Endpoint endpoint, Class<T> type); <T> T receiveBody(Endpoint endpoint, long timeout, Class<T> type); <T> T receiveBodyNoWait(Endpoint endpoint, Class<T> type);