第 42 章 生成者接口


摘要

本章论述了如何实施 Producer 接口,这是 Apache Camel 组件的实现中的一个重要步骤。

42.1. Producer 接口

概述

org.apache.camel.Producer 类型的实例代表路由中的目标端点。生产者的角色是将请求(消息)发送到特定的物理端点,并接收对应的响应(OutFault 消息)。Producer 对象基本上是一个特殊的 Processor,它出现在处理器链的末尾(等同于路由)。图 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 ()(从 Processorherited from Processor) HEKETI-cassandraThe most important method.生产者基本上是一种特殊的处理器类型,它向端点发送请求,而不是将交换对象转发到另一个处理器。通过覆盖 process () 方法,您可以定义生成者如何向相关端点发送和接收消息。
  • getEndpoint () wagon- swigReturns 对父端点实例的引用。
  • createExchange () HEKETI-wagonThese 超载方法与 Endpoint 接口中定义的对应方法类似。通常,这些方法委派到父 Endpoint 实例上定义的对应方法(默认为 DefaultEndpoint 类)。有时,您可能需要覆盖这些方法。

异步处理

在生成生成器的 exchange 对象处理通常涉及向远程目标发送消息,并等待 reply swig-5-4cancan 可能阻断大量时间。如果要避免阻止当前线程,您可以选择将制作者实施为 异步处理器。异步处理模式将前面的处理器与生成者分离,以便 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 Interface” 所示。

例 42.3. AsyncCallback Interface

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 类”

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.