架构

消费者模板

师成师成· 更新于 2026-09-28· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

ConsumerTemplate

ConsumerTemplate 接口允许你以多种不同的方式从端点接收消息交换,从而方便地在 Java 代码中操作 Camel Endpoint 实例。

如果你只是想从同一个端点接收大量消息,可以为它配置一个默认端点;也可以将 Endpoint 实例或 uri 作为第一个参数传入。

receiveBody() 方法允许你轻松地从端点接收任意对象,示例如下:

ConsumerTemplate template = exchange.getContext().createConsumerTemplate();

// recieve from default endpoint
Object body = template.receiveBody();

// receive from a specific queue
body = template.receiveBody("activemq:MyQueue");

接收模式

消费者模板(Consumer Template)有三种工作模式:

  • receive —— 从端点消费,等待直到有消息为止(可能会等待很长时间!)。
  • receiveNoWait —— 从端点消费,如果没有消息则不等待。
  • receiveTimeout —— 从端点消费,等待直到收到响应或发生超时。

在前面的示例中,我们使用的是第一种模式(receiveBody)。例如,如果 activemq:MyQueue 上没有消息,Camel 将会一直等待,直到有消息发送到该队列。

通常你并不希望无限期地等待,因此使用超时值(例如 5 秒)往往是个好主意:

ConsumerTemplate template = exchange.getContext().createConsumerTemplate();

// receive from a specific queue
body = template.receiveBody("activemq:MyQueue", 5000);

在此,我们最多等待 5 秒以消费一条消息,如果没有消息,则返回 null 作为响应。

配置默认缓存大小

你可以全局配置 ProducerTemplate 和 ConsumerTemplate 的默认缓存大小,这些模板将由 CamelContext 创建或通过依赖注入提供。

可以在 CamelContext 上将其作为一个全局选项进行配置,如以下 Java 代码所示:

getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_CACHE_POOL_SIZE, "50");

或者在 application.properties 中:

camel.main.consumerTemplateCacheSize = 50

默认的最大缓存大小为 1000。

另请参阅

参见 ProducerTemplate

评论

登录后参与评论

正在加载评论…