143.5. Spring Boot Auto-Configuration


组件支持 4 个选项,如下所列。

Expand
Name描述默认值类型

camel.component.hbase.configuration

使用共享配置。选项是 org.apache.hadoop.conf.Configuration 类型。

 

字符串

camel.component.hbase.enabled

启用 hbase 组件

true

布尔值

camel.component.hbase.pool-max-size

HTable 池中为每个表保留的最大引用数。默认值为 10。

10

整数

camel.component.hbase.resolve-property-placeholders

组件是否应在启动时解析属性占位符。只有 String 类型的属性可以使用属性占位符。

true

布尔值

143.5.1. Put Operations (放置操作)

HBase 是基于列的存储,允许您将数据存储在特定行的特定列中。列分组为系列,因此要指定一个列,您需要指定列系列和该列的限定符。要将数据存储到特定的列中,您需要同时指定列和行。

将数据存储在 HBase 中的 camel 路由中的最简单场景是将消息正文的一部分存储到指定的 HBase 列。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Value -->
            <setHeader headerName="CamelHBaseValue">
                <el>${in.body.value}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier"/>
        </route>

上面的路由假定消息正文包含一个具有 id 和 value 属性的对象,并将值的内容存储在 id 指定的行中的 HBase 列 myfamily:myqualifier 中。如果我们需要指定多个列/值对,我们可以仅指定额外的列映射。请注意,您必须使用结果上的第 2 个标头中的数字,如 RowId2、RowId3、RowId4 等。只有第一代标题没有数字 1。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row 1st column -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Row 2nd column -->
            <setHeader headerName="CamelHBaseRowId2">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Value for 1st column -->
            <setHeader headerName="CamelHBaseValue">
                <el>${in.body.value}</el>
            </setHeader>
            <!-- Set the HBase Value for 2nd column -->
            <setHeader headerName="CamelHBaseValue2">
                <el>${in.body.othervalue}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier&amp;family2=myfamily&amp;qualifier2=myqualifier2"/>
        </route>

务必要记住,您可以使用 uri 选项、消息标头或这两者的组合。建议将常量指定为 uri 和 dynamic 值的一部分,作为标头的一部分。如果某个项同时定义为标头和作为 uri 的一部分,则将使用标头。

143.5.2. 获取运营.

Get Operation 是一个操作,用于从指定的 HBase 行中检索一个或多个值。要指定您要检索的值,您只需将它们指定为 uri 的一部分,或作为消息标头的一部分。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row of the Get -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseGet&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long"/>
            <to uri="log:out"/>
        </route>

在上例中,get 操作的结果将存储为名为 CamelHBaseValue 的标头。

143.5.3. 删除操作.

您还可以 camel-hbase 来执行 HBase delete 操作。删除操作将删除一行。所有需要指定的一行或多行作为消息标头的一部分。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row of the Get -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseDelete"/>
        </route>

143.5.4. 扫描操作.

扫描操作等同于 HBase 中的查询。您可以使用扫描操作来检索多行。要指定哪些列应该是结果的一部分,并指定如何将值转换为对象,您可以使用 uri 选项或标头。

        <route>
            <from uri="direct:in"/>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long&amp;rowType=java.lang.String"/>
            <to uri="log:out"/>
        </route>

在这种情况下,您还需要指定一个过滤器列表来限制结果。您可以将过滤器列表指定为 uri 的一部分,camel 只返回满足 ALL 过滤器的行。
要使过滤器可以了解消息一部分的信息,camel 定义了 ModelAwareFilter。这样,您的过滤器可以考虑消息和映射策略定义的模型。
当使用 ModelAwareFilter camel-hbase 时,会将所选映射策略应用到 in 消息,会创建一个模型映射的对象,并将该对象传递给 Filter。

例如,要使用 作为消息标头的条件来执行扫描,您可以使用 ModelAwareColumnMatchingFilter,如下所示。

        <route>
            <from uri="direct:scan"/>
            <!-- Set the Criteria -->
            <setHeader headerName="CamelHBaseFamily">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier">
                <constant>first</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue">
                <el>in.body.firstName</el>
            </setHeader>
            <setHeader headerName="CamelHBaseFamily2">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier2">
                <constant>last</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue2">
                <el>in.body.lastName</el>
            </setHeader>
            <!-- Set additional fields that you want to be return by skipping value -->
            <setHeader headerName="CamelHBaseFamily3">
                <constant>address</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier3">
                <constant>country</constant>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;filters=#myFilterList"/>
        </route>

        <bean id="myFilters" class="java.util.ArrayList">
            <constructor-arg>
                <list>
                    <bean class="org.apache.camel.component.hbase.filters.ModelAwareColumnMatchingFilter"/>
                </list>
            </constructor-arg>
        </bean>

上面的路由假定 pojo 具有属性 firstName 和 lastName 作为消息正文传递,它会采用这些属性,并将它们添加为消息标头的一部分。默认映射策略会创建一个模型对象,它将把标头映射到 HBase 列,并传递模型 ModelAwareColumnMatchingFilter。过滤器将过滤掉任何行,它们不包含与模型匹配的列。类似于通过 example 的查询。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部