2.6.3. 端点绑定


什么是绑定?

在 Apache Camel 中,绑定 是一种在 contract 中嵌套端点的方法,例如,通过应用数据格式、内容增强或验证步骤来嵌套端点。条件或转换适用于即将进入的消息,并将互补条件或转换应用到消息。

DataFormatBinding

对于您要定义 marshals 和 unmarshals 是一个特定数据格式的绑定,DataFormatBinding 类对特定数据格式很有用。第 2.6.2 节 “marshalling 和 Unmarshalling”在这种情况下,您需要创建绑定的过程都是创建一个 DataFormatBinding 实例,传递对构造器中相关数据格式的引用。

例如,例 2.2 “JAXB Binding” 中的 XML DSL 片断显示一个绑定(带有 ID、jaxb)的绑定(带有 ID、jaxb ),在与 Apache Camel 端点相关联时,它可以编出 JAXB 数据格式:

例 2.2. JAXB Binding

<beans ... >
    ...
    <bean id="jaxb" class="org.apache.camel.processor.binding.DataFormatBinding">
        <constructor-arg ref="jaxbformat"/>
    </bean>

    <bean id="jaxbformat" class="org.apache.camel.model.dataformat.JaxbDataFormat">
        <property name="prettyPrint" value="true"/>
        <property name="contextPath" value="org.apache.camel.example"/>
    </bean>

</beans>

将绑定与端点关联

以下的 alternatives 可用于将绑定与端点相关联:

绑定 URI

要将绑定与端点关联,您可以将端点 URI 与 binding:NameOfBinding 为前缀,其中 NameOfBinding 是绑定的 Bean ID (例如,Spring XML 中创建绑定 ID)。

例如,以下示例显示了如何将 ActiveMQ 端点与 例 2.2 “JAXB Binding” 中定义的 JAXB 绑定关联。

<beans ...>
    ...
    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="binding:jaxb:activemq:orderQueue"/>
            <to uri="binding:jaxb:activemq:otherQueue"/>
        </route>
    </camelContext>
    ...
</beans>

BindingComponent

您不需要使用前缀来与端点关联,而是让关联隐式,以便该绑定不需要出现在 URI 中。对于没有隐式绑定的现有端点,达到此目的的最简单方法是使用 BindingComponent 类嵌套端点。

例如,要将 jaxb 绑定与 activemq 端点关联,您可以定义一个新的 BindingComponent 实例,如下所示:

<beans ... >
    ...
    <bean id="jaxbmq" class="org.apache.camel.component.binding.BindingComponent">
        <constructor-arg ref="jaxb"/>
        <constructor-arg value="activemq:foo."/>
    </bean>

    <bean id="jaxb" class="org.apache.camel.processor.binding.DataFormatBinding">
        <constructor-arg ref="jaxbformat"/>
    </bean>

    <bean id="jaxbformat" class="org.apache.camel.model.dataformat.JaxbDataFormat">
        <property name="prettyPrint" value="true"/>
        <property name="contextPath" value="org.apache.camel.example"/>
    </bean>

</beans>

其中(可选)第二个构造器参数到 jaxbmq 定义 URI 前缀。现在,您可以使用 jaxbmq ID 作为端点 URI 的方案。例如,您可以使用此绑定组件定义以下路由:

<beans ...>
    ...
    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="jaxbmq:firstQueue"/>
            <to uri="jaxbmq:otherQueue"/>
        </route>
    </camelContext>
    ...
</beans>

前面的路由等同于以下路由,它使用绑定 URI 方法:

<beans ...>
    ...
    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="binding:jaxb:activemq:foo.firstQueue"/>
            <to uri="binding:jaxb:activemq:foo.otherQueue"/>
        </route>
    </camelContext>
    ...
</beans>
注意

对于实施自定义 Apache Camel 组件的开发人员,可以通过实施从 org.apache.camel.spi.HasBinding 接口继承的端点类来实现此目的。

BindingComponent constructors

BindingComponent 类支持以下构造器:

public BindingComponent()
无参数形式。使用属性注入配置绑定组件实例。
public BindingComponent(Binding binding)
将此绑定组件与指定的 绑定 对象 绑定 相关联。
public BindingComponent(Binding binding, String uriPrefix)
将此绑定组件与指定的 Binding 对象、绑定和 URI 前缀关联。uriPrefix。这是最常用的构造器。
public BindingComponent (Binding binding, String uriPrefix, String uriPostfix)
这个构造器支持额外的 URI post-fix, uriPostfix 的参数,该参数自动附加到使用此绑定组件定义的任何 URI。

实现自定义绑定

除了用于 marshalling 和 unmarshalling 数据格式的 DataFormatBinding 外,您还可以实施自己的自定义绑定。定义自定义绑定,如下所示:

  1. 实施 org.apache.camel.Processor 类,对传入消费者端点的消息进行转换( 元素中讲)。
  2. 实施互补 org.apache.camel.Processor 类,对来自生产端点( 应用到 元素)传出的消息执行反向转换。
  3. 实施 org.apache.camel.spi.Binding 接口,该接口充当处理器实例的工厂。

绑定接口

例 2.3 “org.apache.camel.spi.Binding 接口” 显示 org.apache.camel.spi.Binding 接口的定义,您必须实施这些接口来定义自定义绑定。

例 2.3. org.apache.camel.spi.Binding 接口

// Java
package org.apache.camel.spi;

import org.apache.camel.Processor;

/**
 * Represents a <a href="http://camel.apache.org/binding.html">Binding</a> or contract
 * which can be applied to an Endpoint; such as ensuring that a particular
 * <a href="http://camel.apache.org/data-format.html">Data Format</a> is used on messages in and out of an endpoint.
 */
public interface Binding {

    /**
     * Returns a new {@link Processor} which is used by a producer on an endpoint to implement
     * the producer side binding before the message is sent to the underlying endpoint.
     */
    Processor createProduceProcessor();

    /**
     * Returns a new {@link Processor} which is used by a consumer on an endpoint to process the
     * message with the binding before its passed to the endpoint consumer producer.
     */
    Processor createConsumeProcessor();
}

何时使用绑定

当您需要将同一类型转换应用到许多不同类型的端点时,绑定非常有用。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.