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

设计:Spring集成:集群环境中的Jdbc入站适配器

闻梓
2023-03-14

我们在Oracle Weblogic 10.3.6服务器中有两个节点的集群环境,它是循环的。

我有一个服务,它从外部系统获取消息并将它们放入数据库(Oracle DB)。

我正在使用jdbc入站适配器转换这些消息并将其传递到通道。一条消息只处理一次。我计划在DB表中有一列(NODE\u NAME)。当从外部系统获取消息的第一个服务也使用NODE_名称(weblogic.NAME)更新列时。在jdbc入站适配器的SELECT查询中,如果我指定NODE_名称,那么消息将只处理一次。

i、 e.如果(节点1的)服务1将消息保存在DB中,则(节点1的)入站适配器1将消息传递到通道。

Example: 
<si-jdbc:inbound-channel-adapter id="jdbcInboundAdapter"
    channel="queueChannel" data-source="myDataSource"
    auto-startup="true"
    query="SELECT * FROM STAGE_TABLE WHERE STATUS='WAITING' and NODE_NAME = '${weblogic.Name}'"
    update="UPDATE STAGE_TABLE SET STATUS='IN_PROGRESS' WHERE ID IN (:Id)"
    max-rows-per-poll="100" row-mapper="rowMapper"
    update-per-row="true">

    <si:poller fixed-rate="5000">
        <si:advice-chain> 
            <ref bean="txAdvice"/> 
            <ref bean="inboundAdapterConfiguration"/> 
        </si:advice-chain>
    </si:poller>
</si-jdbc:inbound-channel-adapter>

这个设计好吗?

第二种方法:使用下面的选择SQL在jdbc-inbing-适配器,但我猜这将失败,因为我使用Oracle数据库。

SELECT * FROM TABLE WHERE STATUS='WAITING' FOR UPDATE SKIP LOCKED

如果有人能给我指出正确的方向,那就太好了。

共有1个答案

楚勇
2023-03-14

实际上,更新跳过锁定正是Oracle的功能-html" target="_blank">https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2060739900346201280

如果您对as有疑问,以下是来自Spring Integration的代码:https://github.com/spring-projects/spring-integration/blob/master/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/channel/OracleChannelMessageStoreQueryProvider.java#L39

 类似资料:
  • 我需要在多/集群环境中实现sftp流入站通道适配器。我不应该将文件存储在我的本地目录中,我已经流文件并立即处理它。它在单个实例中工作得很好,但是如果我试图在多个节点中运行poller,就会遇到类似重复处理的问题,第二个节点找不到文件。 我尝试使用propertiesmetadatastore按照https://docs.spring.io/spring-integration/reference/

  • 我正在开发一个Spring集成应用程序,我有一个地图列表,我需要将其插入到表格中。 我使用了jdbc: Outsport-网关或适配器将记录插入到表中。 但是如何使用jdbc:出站网关从我的地图列表中插入所有记录。

  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更

  • 我使用Spring调度程序,使用@调度注释来调度运行文件生成服务的作业。应用程序部署在集群环境中Tomcat的5个单独节点上,用于负载平衡和故障转移。正因为如此,服务被调度了5次,这是不可能的。有没有办法将调度程序配置为仅在当前节点上运行? 有一种方法使用数据库找出当前活动节点,并在这里调用该特定实例的调度器 另一种方法是使用石英调度器 由于我无法对部署的应用程序进行重大更改,是否有简单的解决方案

  • 关于这个设置,我有几个问题: > 我的应用程序(Spring/Hibernate)每个用户有一个不同的数据库。所以这里的问题是数据源(使用spring和hibernate来实现持久性)是在Tomcat级别创建的。因此,无论我做什么连接池都是在服务器级别。 根据集群配置,Tomcat实例将创建它们自己的连接池。

  • 基础知识: 使用带集成的Spring 4.1.1,引导和1.0.0的DSL。 多个入站SFTP适配器在不同的时间表上从不同的供应商获取文件。 每个集成流在文件下载后将标头附加到消息中,以标识供应商源。 使用MessagePublishingErrorHandler处理异常。 标准消息流在消息处理成功或消息未能完成时通知外部监控解决方案。使用消息头来识别哪个流失败。 在我们收到消息后,成功和错误流都