第 43 章 交换接口


摘要

本章论述了 Exchange 接口。由于 Apache Camel 2.0 中执行的 camel-core 模块重构,因此不再需要定义自定义交换类型。DefaultExchange 实现现在可以在所有情况下使用。

43.1. Exchange Interface

概述

org.apache.camel.Exchange 类型的实例封装通过路由传递的当前消息,其他元数据编码为交换属性。

图 43.1 “Exchange Inheritance Hierarchy” 显示交换类型的继承层次结构。默认实施 DefaultExchange 总是被使用。

图 43.1. Exchange Inheritance Hierarchy

交换继承层次结构

Exchange 接口

例 43.1 “交换接口” 显示 org.apache.camel.Exchange 接口的定义。

例 43.1. 交换接口

package org.apache.camel;

import java.util.Map;

import org.apache.camel.spi.Synchronization;
import org.apache.camel.spi.UnitOfWork;

public interface Exchange {
    // Exchange property names (string constants)
    // (Not shown here)
    ...

    ExchangePattern getPattern();
    void setPattern(ExchangePattern pattern);

    Object getProperty(String name);
    Object getProperty(String name, Object defaultValue);
    <T> T  getProperty(String name, Class<T> type);
    <T> T  getProperty(String name, Object defaultValue, Class<T> type);
    void   setProperty(String name, Object value);
    Object removeProperty(String name);
    Map<String, Object> getProperties();
    boolean hasProperties();

    Message getIn();
    <T> T   getIn(Class<T> type);
    void    setIn(Message in);

    Message getOut();
    <T> T   getOut(Class<T> type);
    void    setOut(Message out);
    boolean hasOut();

    Throwable getException();
    <T> T     getException(Class<T> type);
    void      setException(Throwable e);

    boolean isFailed();

    boolean isTransacted();

    boolean isRollbackOnly();

    CamelContext getContext();

    Exchange copy();

    Endpoint getFromEndpoint();
    void     setFromEndpoint(Endpoint fromEndpoint);

    String getFromRouteId();
    void   setFromRouteId(String fromRouteId);

    UnitOfWork getUnitOfWork();
    void setUnitOfWork(UnitOfWork unitOfWork);

    String getExchangeId();
    void setExchangeId(String id);

    void addOnCompletion(Synchronization onCompletion);
    void handoverCompletions(Exchange target);
}

Exchange 方法

Exchange 接口定义以下方法:

  • getPattern (), setPattern () HEKETI-busyboxThe Exchange pattern 可以是 org.apache.camel.ExchangePattern 中枚举的值之一。支持以下交换模式值:

    • InOnly
    • RobustInOnly
    • InOut
    • InOptionalOut
    • OutOnly
    • RobustOutOnly
    • OutIn
    • OutOptionalIn
  • setProperty (), getProperty (), getProperties (), removeProperty (), hasProperties ()属性由您可能需要的其它元数据组成,供您的组件实现。
  • setIn (), getIn () wagon-wagonSetter 和 getter 方法,用于 In 消息。

    DefaultExchange 类提供的 get In () 实施实施 lazy 创建语义:如果在调用 getIn () 时 In 消息为 null,则 DefaultExchange 类会创建一个默认的 In 消息。

  • setOut (), getOut (), hasOut (), hasOut ()5-4Setter 和 getter 方法用于 Out 消息。

    getOut () 方法隐式支持 lazy 创建 Out 消息。也就是说,如果当前 Out 消息是 null,则会自动创建新的消息实例。

  • setException (), getException () wagon-wagonGetter 和 setter 方法用于例外对象(格式为 Throwable type)。
  • isFailed () HEKETI-wagonReturns true (如果交换因为异常或由于错误而失败)。
  • 如果交换被转换,则 isTransacted () wagon-wagonReturns true
  • 如果交换标记为回滚,则 isRollback () HEKETI-wagonReturns true
  • Getcontext () wagon- swigReturns 对关联的 CamelContext 实例的引用。
  • copy () HEKETICreates 一个新的与当前自定义交换对象相同的新副本(交换 ID 除外)副本。此操作也会复制 In 消息正文和标头,out 消息(若有)和 Fault 消息(若有)。
  • setFromEndpoint (), getFromEndpoint () HEKETI-wagonGetter 和 setter 方法,用于组织此消息的消费者端点(通常是在路由开始时出现在 from () DSL 命令中的端点)。
  • setFromRouteId (), getFromRouteId () 5-4-wagonGetters 和 setters 用于源自此交换的路由 ID。getFromRouteId () 方法应该只在内部调用。
  • setUnitOfWork (), getUnitOfWork () wagon-wagonGetter 和 setter 方法,用于 org.apache.camel.spi.UnitOfWork bean 属性。此属性只适用于可以参与事务的交换。
  • setExchangeId (), getExchangeId () HEKETI-wagonGetter 和 setter 方法用于交换 ID。自定义组件是否使用交换 ID 是一个实施详情。
  • addOnCompletion () HEKETIAdds 是一个 org.apache.camel.spi.Synchronization 回调对象,它会在处理交换完成时调用。
  • 将所有 OnCompletion 回调对象到指定交换对象的 handoverCompletions () HEKETI-wagonHands。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.