【问题标题】:apache camel how to get header attributes from sql-componentapache camel如何从sql-component获取标题属性
【发布时间】:2013-09-02 11:26:14
【问题描述】:

我是 Apache Camel 的新手,我一直盯着编写一个从一个数据库中获取数据并将其插入另一个数据库的应用程序。我正在使用 sql 组件,并试图弄清楚如何使用 spring dsl 从消息头中获取 CamelSqlUpdateCount、CamelSqlRowCount 和 CamelSqlQuery。

我知道我可以使用这个来获取数据中的属性......

<log message="Processing product ${body[product_id]}"/>

但是当我像这样插入后尝试从标题中获取数据时......

<from uri="sourceSql:{{sql.selectProduct}}"/>
<log message="SELECT,${header.CamelSqlQuery},${header.CamelSqlRowCount}" loggingLevel="INFO" logName="db_log"/>
<to uri="targetSql:{{sql.insertProductOrig}}"/>     
<log message="INSERT,CONV_ORIG,${header.CamelSqlQuery},${header.CamelSqlUpdateCount}" loggingLevel="INFO" logName="db_log"/> 

它返回空。在获得有关在我的路由中打开跟踪以查看消息标头中返回的内容的建议后,我可以看到这些标头属性不存在。我正在连接到 sql server 来选择和 mysql 来插入。有谁知道可能出了什么问题?

我已经附加了一些来自跟踪的示例输出...

2013-09-04,21:11:55.615,MacBook-local >>> (processProduct-route) from(sourceSql://SELECT%20TOP%205%20product_id%20FROM%20product_) --> log[SELECT,${header.CamelSqlQuery},${header.CamelSqlRowCount}] <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook-local}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}
    2013-09-04,21:11:55.625,MacBook-local >>> (processProduct-route) log[SELECT,${header.CamelSqlQuery},${header.CamelSqlRowCount}] --> multicast <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook-local}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}
    2013-09-04,21:11:55.644,MacBook-local >>> (processProduct-route) from(sourceSql://SELECT%20TOP%205%20product_id%20FROM%20product_) --> targetSql://insert%20into%20conv_stg_product_%20(product_id)%20values%20(:%23product_id) <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook-local}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}
    2013-09-04,21:11:55.646,MacBook-local >>> (processProduct-route) from(sourceSql://SELECT%20TOP%205%20product_id%20FROM%20product_) --> log[INSERT,CONV_STG,${header.CamelSqlQuery},${header.CamelSqlUpdateCount}] <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}
    2013-09-04,21:11:55.642,MacBook >>> (processProduct-route) from(sourceSql://SELECT%20TOP%205%20product_id%20FROM%20product_) --> log[INSERT,CONV_ORIG,${header.CamelSqlQuery},${header.CamelSqlUpdateCount}] <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}

下面是 sql 语句的样子...

sql.selectProduct=SELECT TOP 5 product_id FROM product_
sql.insertProductOrig=insert into conv_orig_product_ (product_id) values (:#product_id)

这是我 POM 的摘录,用于显示我正在使用的 jdbc 驱动程序...

<!-- SQL Server database driver -->
<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.3.0</version>
</dependency>  

<!-- MySQL database driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

谢谢

【问题讨论】:

  • 你用的是什么版本的骆驼?
  • 2.11 - 我使用了正确的语法吗?
  • 是的,第一种语法是正确的。您可以启用跟踪并查看消息上的标题:camel.apache.org/tracer。查看它是否为空,或者邮件中有哪些标题。
  • 感谢您帮助我追踪标题中的内容。标题中唯一的内容是面包屑 ID。在camel.apache.org/sql-component.html#SQLComponent-Headervalues 上记录的那些标头值不会出现在跟踪中。不知道发生了什么。我将不得不做更多的研究,以确定是否有其他人有这个问题。
  • 还是想不通。我已经更新了帖子以提供更多信息

标签: apache-camel


【解决方案1】:

这看起来像是最终用户问题。

2013-09-04,21:11:55.625,MacBook-local >>> (processProduct-route) log[SELECT,${header.CamelSqlQuery},${header.CamelSqlRowCount}] --> multicast <<< Pattern:InOnly, Headers:{breadcrumbId=MacBook-local}, BodyType:org.springframework.util.LinkedCaseInsensitiveMap, Body:{product_id=273}

来自跟踪日志的详细信息表明正在使用多播 EIP(见上文)。当你这样做时,多播复制了传入的消息(原始消息),每个接收者都会得到那个“原始”消息的副本。这样就可以解释为什么这些标头不存在,因为原始副本没有 SQL 更新标头。

所以删除多播并使用直接管道。

您可以在此处阅读有关多播和管道的信息

【讨论】:

  • 在取出多播后 ${headers.CamelSqlUpdateCount} 现在反映了插入的行数,但是 ${headers.CamelSqlQuery} 仍然没有产生任何东西。我是不是又误会了什么?
  • 阅读有关 CamelSqlQuery 功能的网站。它用于覆盖端点查询以运行另一个查询。此标头是可选的,如果未提供,则使用端点查询。
猜你喜欢
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多