第 43 章 交换接口

摘要

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

43.1. Exchange Interface

概述

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

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

图 43.1. 交换层次结构

交换继承层次结构

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 接口定义了以下方法:

  • getPattern (), setPattern () 方式为在 org.apache.camel.ExchangePattern 中由 org.apache.camel.ExchangePattern 处枚举的值之一。支持以下交换模式值:

    • InOnly
    • RobustInOnly
    • InOut
    • In optionalOut
    • OutOnly
    • RobustOutOnly
    • OutIn
    • OutOptionalIn
  • setProperty () , get Properties (), getProperties (), removeProperty (), hasProperties () 具有Properties ()使用属性集,以及 getter 方法将命名属性与 Exchange 实例关联。这些属性包括您可能需要实施组件所需的各种元数据。
  • setIn (), getIn () 方式 ©-WWNSetter 和 getter 方法用于 In 消息。

    DefaultExchange 类提供的 getIn () 实现 lazy creation语义s: if In message is null when getIn () 被调用时,DefaultExchange 类会创建一个默认的 In 消息。

  • setOut (), getOut (), hasOut () TOKEN-ocpSetter 和 getter 方法用于 Out 消息。

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

  • setException (), getException () adjust-strategyGetter 和 setter 方法用于异常对象( 可浏览 类型)。
  • 如果交换因为异常或因为错误而失败,则 isFailed () ALLOW-将Returns true 会失败。
  • 如果交换被转换,则 isTransacted () 方式为,将显示为 true
  • 如果交换标记为进行回滚,则 isRollback () InstallSucceededReturns true
  • Getcontext () 帮助我们Returns 对关联的 CamelContext 实例的引用。
  • copy () baseDomain-»Creates a new, same (从交换 ID 处)副本当前自定义交换对象。In 消息的正文和标头、Out 消息(若有)和 Fault 信息(若有)也由这个操作复制。
  • setFromEndpoint (), getFromEndpoint () navigator-strategyGetter 和 setter 方法用于组织此消息的使用者端点(通常是在路由开始时出现在 from () DSL 命令中)。
  • setFromRouteId (), getFromRouteId () WWN-RouteGetters 和 setters 用于发起此交换的路由 ID。getFromRouteId () 方法应仅在内部调用。
  • setUnitOfWork (), getUnitOfWork () EOF-strategyGetter 和 setter 方法用于 org.apache.camel.spi.UnitOfWork bean 属性。只有可参与事务的交换需要此属性。
  • setExchangeId (), getExchangeId () Memcached-的Getter 和 setter 方法用于交换 ID。自定义组件是否使用交换 ID 是实施详情。
  • addOnCompletion () 方式为 org.apache.camel.spi.Synchronization callback 对象,它会在处理交换时调用。
  • handoverCompletions () navigator-sandboxedHands over the OnCompletion callback 对象到指定的 Exchange 对象。