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 是一个基于列的存储,允许您将数据存储在特定行的特定列中。列分组到系列中,因此要指定您需要指定列中的列,以及该列的限定符。要将数据存储至特定的列中,您需要同时指定列和行。

将数据存储到 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>
Copy to Clipboard Toggle word wrap

上面的路由假定消息正文包含一个具有 id 和 value 属性的对象,并将值的内容存储在由 id 指定的行中的 HBase 列 myfamily:myqualifier 中。如果需要指定多个列/值对,我们可以只指定额外的列映射。请注意,您必须使用 2nd 标头中的数字,如 RowId2、RowId3, RowId4 等。只有 1 个标头没有数字 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>
Copy to Clipboard Toggle word wrap

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

143.5.2. 获取操作.

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

        <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>
Copy to Clipboard Toggle word wrap

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

143.5.3. 删除操作.

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

        <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>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

在这种情况下,您还需要指定限制结果的过滤器列表。您可以将过滤器列表指定为 uri,camel 只返回满足所有过滤器的行。
要有一个过滤器,它将了解作为消息一部分的信息,camel 定义 ModelAwareFilter。这将允许您的过滤器考虑消息和映射策略定义的模型。
当使用 ModelAwareFilter camel-hbase 时,会将所选映射策略应用到消息中,会创建一个对映射模型的对象,并将将该对象传递给 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>
Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat