42.2. 实施 Producer 接口
实施制作者的替代方法
您可以通过以下方法之一实施制作者:
如何实施同步制作者
例 42.4 “DefaultProducer 实施” 概述了如何实施同步制作者。在本例中,调用 Producer.process ()
块,直到收到回复为止。
例 42.4. DefaultProducer 实施
import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultProducer; public class CustomProducer extends DefaultProducer { 1 public CustomProducer(Endpoint endpoint) { 2 super(endpoint); // Perform other initialization tasks... } public void process(Exchange exchange) throws Exception { 3 // Process exchange synchronously. // ... } }
在提纲中,process ()
方法通常实施,如下所示:
- 如果交换包含 In 消息,如果这与指定的交换模式一致,则发送 In 消息到指定的端点。
-
如果交换模式预期收到 Out 消息,请等待到收到 Out 消息。这通常会导致
process ()
方法阻止大量时间。 -
收到回复后,调用
exchange.setOut ()
来附加对 Exchange 对象的回复。如果回复包含容错消息,请使用Message.setFault (true)
在 Out 消息上设置 fault 标志。
如何实施异步制作者
例 42.5 “CollectionProducer 实施” 概述了如何实施异步制作者。在这种情况下,您必须实施同步 进程()
方法和异步 进程()
方法(使用额外的 AsyncCallback
参数)。
例 42.5. CollectionProducer 实施
import org.apache.camel.AsyncCallback; import org.apache.camel.AsyncProcessor; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultProducer; public class _CustomProducer_ extends DefaultProducer implements AsyncProcessor { 1 public _CustomProducer_(Endpoint endpoint) { 2 super(endpoint); // ... } public void process(Exchange exchange) throws Exception { 3 // Process exchange synchronously. // ... } public boolean process(Exchange exchange, AsyncCallback callback) { 4 // Process exchange asynchronously. CustomProducerTask task = new CustomProducerTask(exchange, callback); // Process 'task' in a separate thread... // ... return false; 5 } } public class CustomProducerTask implements Runnable { 6 private Exchange exchange; private AsyncCallback callback; public CustomProducerTask(Exchange exchange, AsyncCallback callback) { this.exchange = exchange; this.callback = callback; } public void run() { 7 // Process exchange. // ... callback.done(false); } }
- 1
- 通过扩展
org.apache.camel.impl.DefaultProducer
类并实施 AsyncProcessor 接口,实施自定义异步制作者类 CustomProducer。 - 2
- 实施获取父端点引用的构造器。
- 3
- 实施同步
进程()
方法。 - 4
- 实施异步
process ()
方法。您可以通过几种方法实施异步方法。此处所示的方法是创建一个java.lang.Runnable
实例,该任务
代表在子线程中运行的代码。然后,您可以使用 Java 线程 API 在子线程中运行任务(例如,通过创建新线程或将任务分配给现有线程池)。 - 5
- 通常,您要从异步
process ()
方法返回false
,以表示交换是异步处理的。 - 6
CustomProducerTask
类封装在子线程中运行的处理代码。此类必须存储Exchange
对象的副本、交换
,以及AsyncCallback
对象、回调
,作为私有成员变量。- 7
run ()
方法包含将 In 消息发送到 制作者端点的代码,并等待接收回复(若有)。在收到回复(Out message 或 Fault 消息)并将其插入到交换对象后,您必须调用callback.done ()
来通知处理完成调用者。