第 42 章 生成者接口
摘要
本章论述了如何实现 Producer 接口,这是 Apache Camel 组件实施中的基本步骤。
42.1. Producer 接口
概述
org.apache.camel.Producer 类型的实例代表路由中的目标端点。生成者的角色是将请求(消息中)发送到特定的物理端点,并接收相应的响应(Out 或 Fault 消息)。Producer
对象基本上是一个特殊的 处理器类型
,出现在处理器链的末尾(等同于路由)。图 42.1 “生产者继承层次结构” 显示制作者的继承层次结构。
图 42.1. 生产者继承层次结构
Producer 接口
例 42.1 “生成者接口” 显示 org.apache.camel.Producer
接口的定义。
例 42.1. 生成者接口
package org.apache.camel; public interface Producer extends Processor, Service, IsSingleton { Endpoint<E> getEndpoint(); Exchange createExchange(); Exchange createExchange(ExchangePattern pattern); Exchange createExchange(E exchange); }
生成者方法
Producer 接口定义以下方法:
-
process ()
(从 Processor 中完全ited) 需要注意最重要的方法。制作者基本上是一个特殊的处理器类型,它向端点发送请求,而不是将交换对象转发到另一个处理器。通过覆盖process ()
方法,您可以定义制作者如何向相关端点发送和接收消息。 -
getEndpoint ()
criu-wagonReturns 对父端点实例的引用。 -
createExchange ()
criu-wagonThese overloaded 方法与 Endpoint 接口中定义的相应方法类似。通常,这些方法委托给父 Endpoint 实例中定义的相应方法(这是DefaultEndpoint
类默认执行的操作)。有时,您可能需要覆盖这些方法。
异步处理
处理制作者的 exchange 对象通常涉及向远程目的地发送消息,并等待 reply to a responses-wagoncan 可能出现大量时间。如果要避免阻止当前线程,您可以选择将制作者实施为 异步处理器。异步处理模式将前面的处理器与生成者分离,以便 process ()
方法在没有延迟的情况下返回。请参阅 第 38.1.4 节 “异步处理”。
在实施制作者时,您可以通过实施 org.apache.camel.AsyncProcessor 接口来支持异步处理模型。在自己上,这不足以确保使用异步处理模型:链中前面的处理器也需要调用 process ()
方法的异步版本。AsyncProcessor 接口的定义显示在 例 42.2 “AsyncProcessor Interface” 中。
例 42.2. AsyncProcessor Interface
package org.apache.camel; public interface AsyncProcessor extends Processor { boolean process(Exchange exchange, AsyncCallback callback); }
process ()
方法的异步版本采用额外的参数,即 org.apache.camel.AsyncCallback 类型。对应的 AsyncCallback 接口定义,如 例 42.3 “AsyncCallback 接口” 所示。
例 42.3. AsyncCallback 接口
package org.apache.camel; public interface AsyncCallback { void done(boolean doneSynchronously); }
AsyncProcessor.process ()
的调用者必须提供 AsyncCallback 的实现,以接收处理已完成的通知。AsyncCallback.done ()
方法使用一个布尔值参数,指示处理是同步执行的。通常,标志 为 false
,以指示异步处理。然而,在某些情况下,生成者 不会 异步处理(尽管要求这样做)。例如,如果制作者知道对交换的处理可以快速完成,则它可以通过同步进行来优化处理。在这种情况下,doneSynchronously
标志应设置为 true
。
ExchangeHelper 类
在实施制作者时,您可能会发现在 org.apache.camel.util.ExchangeHelper
工具类中调用某些方法会很有帮助。有关 ExchangeHelper
类的详情,请参考 第 35.4 节 “ExchangeHelper 类”。