当前位置: 首页 > 知识库问答 >
问题:

Camel:如何使用StreamList从SQL组件流式处理

诸葛令
2023-03-14

我正在尝试使用Camels SQL组件,使用outputType=StreamList从数据库中传输数据。我从一个带有ConsumerTemplate的Java类中获取ResultIterator:

public Flux<String> CreateFlux () {
ConsumerTemplate consumer = camelContext.createConsumerTemplate();

    ResultSetIterator resultSetIterator = consumer.receiveBody(
            "sql:SELECT DATA FROM TRANSAKSJON WHERE REQ_ID='" + recId + "'?outputType=StreamList", ResultSetIterator.class);
    ...
    while (result.hasNext()) {
        Map<String, String> map = (Map<String, String>) result.next();
        String data = map.get("DATA");

    }
}

当尝试迭代ResultsetIterator时,我得到以下错误:

组织。h2。jdbc。JdbcSQLException:对象已关闭[90007-197]

经检查,我发现连接已关闭。连接={HikariProxyConnection@16287} "HikariProxyConnection@1048081993包装com。扎克瑟。希卡里。水塘代理连接。“闭合连接”

如何使用camel SQL组件来流式传输?我必须从一个不在骆驼路线内的豆子上使用它。我发现,只有在驼峰路由中使用SQL组件时,流媒体才能工作。

骆驼版是:2.24.1

更新1:在看了源代码后,它被要求。onDone关闭连接。我试图在我的默认交换上设置UnitOfWork,通过标记交换未完成来保持连接打开。

Update2:通过设置UnitOf Work来让它工作:

        ProducerTemplate pTmp = camelContext.createProducerTemplate();

        DefaultExchange defaultExchange = new DefaultExchange(camelContext);
        UnitOfWork unitOfWork = new DefaultUnitOfWork(defaultExchange);
        defaultExchange.setUnitOfWork(unitOfWork);
        pTmp.send("direct:DbStream", defaultExchange);

路由DbStream执行上述SQL选择

共有1个答案

常俊侠
2023-03-14

不要使用接收体,而只使用接收来获取Exchange。然后您可以从它的消息体中获取迭代器,使用后,您可以完成交换(参见javadoc)

 类似资料:
  • 但是,这里不执行处理器中的代码,而是执行SampleProducer中的代码。在这里,我想把处理器拆开。我怎么做?

  • 我的任务是处理路由中所有传入的消息,并将它们保存到数据库中。我的路由从webservice(camel cxf)开始,然后处理到ejb并返回soap响应。 我决定使用驼峰sql组件。就我在记录传入消息方面没有任何问题而言: 但是我不知道如何处理异常并以SOAP消息的形式保存它们。 但它将原始消息保存在数据列中。有谁能帮忙吗?

  • 我有一个目录中的文件如下所示: 保留最后一个文件,但也保留所有其他文件。启动时,Camel处理所有现有文件,这超过了我的需要。 什么是只处理最新文件的最佳方法?

  • 我们的环境由3个jboss服务器组成(门户、jms、协调)。 协调服务器托管骆驼路由,该路由具有消耗自队列(SLAQueue)的路由 JMS服务器托管了我们的所有队列 最近,我们发现了一个错误,即托管在JMS服务器上的TaskQueue中的一些消息没有传递到门户服务器上的MDB。由于某些原因,它们被卡住了,当我们重新启动JMS服务器时,卡住的消息被传递 为了进行调查,我们在“org.apache.

  • 现在,我正在Java EE 7应用程序上使用JMS 2.0和Artemis 1.2.0,我想用Camel做一些集成任务。 目前,在查看驼峰jms文档时,没有提到如何使用通用驼峰jms组件向任何符合jms 2.0的代理生成和使用消息。 组件文档中的唯一示例是使用Spring DSL使用专用的ActiveMQ组件配置ActiveMQ连接工厂。如何配置骆驼JMS的连接以连接到我的Artemis实例? 考

  • 众所周知,Flink有两个核心API(数据流/数据集),但当我使用Flink Sql客户端提交作业时,我不需要选择流或批处理模式。所以,Flink SQL客户机是如何决定使用批处理模式和流模式的。我在官方文件中没有找到答案。所以,我想知道Flink SQL客户端如何区分批处理模式和流模式?