第 42 章 producer Interface

摘要

本章论述了如何实施 Producer 接口,这是实施 Apache Camel 组件的基本步骤。

42.1. Producer 接口

概述

org.apache.camel.Producer 类型的实例代表路由中的一个目标端点。producer 的角色是将请求(传入消息)发送到特定的物理端点,并接收对应的响应(Out 或 Failure 消息)。 Producer 对象基本上是一个特殊的处理器,它出现在处理器链的末尾(与路由相同)。图 42.1 “producer Initance Hierarchy” 显示制作者的继承层次结构。

图 42.1. producer Initance Hierarchy

制作者继承层次结构

Producer 接口

例 42.1 “producer Interface” 显示 org.apache.camel.Producer 接口的定义。

例 42.1. producer Interface

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 方法

Producer 接口定义以下方法:

  • process ()(从 Processor 中完全ited) 需要注意最重要的方法。制作者基本上是一个特殊的处理器类型,它向端点发送请求,而不是将交换对象转发到另一处理器。通过覆盖 process() 方法,您可以定义制作者如何发送和接收消息到相关的端点。
  • getEndpoint() 权利- the parent endpoint 实例引用。
  • createExchange() InfobloxThese overloaded 方法与 Endpoint 接口中定义的对应方法类似。通常,这些方法委托给父 Endpoint 实例上定义的对应方法(这是 DefaultEndpoint 类的作用)。有时,您可能需要覆盖这些方法。

异步处理

在制作的 producer producer-seconds 中处理交换对象通常涉及向远程目的地发送消息,并等待一个 reply-abrtcan 可能会大量时间块。如果您想避免阻塞当前线程,可以选择将生产者作为 异步处理器 实施。异步处理模式将前面的处理器与制作者分离,以便 process() 方法在不延迟的情况下返回。请参阅 第 38.1.4 节 “异步处理”

在实施制作者时,您可以通过实施 org.apache.camel.AsyncProcessor 接口来支持异步处理模型。自行利用此功能是不够的,以确保将使用异步处理模型:另外,链中的前面的处理器还需要调用 process() 方法的异步版本。AsyncProcessor 接口的定义显示在 例 42.2 “AsyncProcessor 接口” 中。

例 42.2. AsyncProcessor 接口

package org.apache.camel;

public interface AsyncProcessor extends Processor {
    boolean process(Exchange exchange, AsyncCallback callback);
}

process() 方法的异步版本采用 org.apache.camel.AsyncCallback 类型的额外参数 回调。对应的 AsyncCallback 接口定义,如 例 42.3 “AsyncCallback Interface” 所示。

例 42.3. AsyncCallback Interface

package org.apache.camel;

public interface AsyncCallback {
    void done(boolean doneSynchronously);
}

AsyncProcessor.process() 的调用者必须提供 AsyncCallback 的实现,以接收处理过程的通知。AsyncCallback.done() 方法取一个布尔值参数,指明处理是同步的执行。通常,标志将是 false,用于指示异步处理。然而,在一些情况下,制作者 并不 以异步处理(尽管被要求这样做)。例如,如果制作者知道交换的处理将迅速完成,它可以通过同步方式来优化处理。在这种情况下,/ networkhron ous 标记应设置为 true

ExchangeHelper 类

在实施制作者时,您可能会发现调用 org.apache.camel.util.ExchangeHelper 实用程序类中的某些方法会很有帮助。有关 ExchangeHelper 类的详情,请参考 第 35.4 节 “ExchangeHelper 类”