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

当需要轮询器并且它具有属性max-消息-每轮询时,具有入站-通道-适配器属性"max-rows"的意义是什么?

程胤运
2023-03-14

int-jdbc:入站-通道-适配器需要int: poller才能工作,两者都分别具有max-row和max-消息-每-轮询。

a) 为什么入站通道适配器需要轮询器。为什么不能内置默认轮询器?

b) 如果每次轮询的最大行数和最大消息数具有不同的值怎么办?

c) 为什么轮询器(o.s.i.e.SourcePollingChannelAdapter)在轮询和处理一组消息时保持轮询(或尝试轮询)?

<int-jdbc:inbound-channel-adapter 
    query="${poller.deliveryLocator.dnd.get}"
    max-rows="${poller.deliveryLocator.dnd.maxRow}"
    row-mapper="deliveryLocatorPollerRowMapper" data-source="dataSource" 
    channel="deliveryLocatorChannel">
    <int:poller fixed-rate="500" time-unit="MILLISECONDS" max-messages-per-poll="${poller.deliveryLocator.dnd.maxRow}">
        <int:transactional />
    </int:poller>

</int-jdbc:inbound-channel-adapter>

对于问题"c",我确实为org.springframework设置了调试级别记录器,并通过在行映射器上设置断点来阻止程序。

我注意到poller一直在轮询DB(这些调试语句正在重复),但是,它没有选择任何记录,因为入站通道适配器被阻塞。

2019-06-10 15:16:29 [task-scheduler-1] DEBUG 
o.s.orm.jpa.JpaTransactionManager - Creating new transaction with name 
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.orm.jpa.JpaTransactionManager - Opened new EntityManager [SessionImpl(1259297282<open>)] for JPA transaction
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.orm.jpa.JpaTransactionManager - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@621f9b19]
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL query
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.i.e.SourcePollingChannelAdapter - Received no Message during the poll, returning 'false'
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.orm.jpa.JpaTransactionManager - Initiating transaction commit
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.orm.jpa.JpaTransactionManager - Committing JPA transaction on EntityManager [SessionImpl(1259297282<open>)]
2019-06-10 15:16:29 [task-scheduler-1] DEBUG o.s.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [SessionImpl(1259297282<open>)] after transaction

共有1个答案

苏彭薄
2023-03-14

a) 您可以定义默认轮询器(请参阅文档)。

b)最大行是限制每次轮询时读取的行数的一种方法(消息有效负载是行或映射对象的集合);max-消息-每次轮询是在轮询间隔之间轮询数据库的次数。

c) 只有当你把工作交给另一个线程时,它才会这样做。如果在轮询器线程上处理结果,则在当前轮询完成之前,不会发生下一次轮询。

我不知道你说的“…被封锁”是什么意思。

 类似资料:
  • 我目前有一个Rabbit MQ Broker设置,带有直接交换,我使用Spring Integration来生成和使用队列中的消息。我使用的是责任链模式,其中我使用SI将消耗的消息从一个POJO传递到另一个POJO。为此,我使用了一个Spring Integration入站通道适配器。这要求它具有对轮询器的引用。 如何移除轮询器,使其不在轮询机制上工作,而是使用回调,以便一旦消息可用,它将从队列中

  • 我对Spring集成相当陌生,我正在尝试设置一个简单的用例: 轮询远程RESTendpoint,将返回的有效负载拆分为多行,并将其发送到Kafka出站适配器。我成功地做了类似的事情,使用了一个文件适配器,但我仍然坚持使用HTTP适配器。我不明白如何将轮询器与HTTP入站适配器相关联。 到目前为止,我的方法是创建一个简单的流: inboundChannelAdapter似乎不接受轮询器。在我之前使用

  • 我也有弹出绑定网关适配器,但它也是一样的。我会非常感谢您的帮助。非常感谢

  • 问题内容: 因为这是有关设计的问题,所以我将先说一下我拥有和想要的东西。 我有 一个使用合成的设计。一个对象包含和一个对象(此示例中为定制对象)。这2个中的每个都有定义它们的自己的数据。这是代码示例: 我也有一个需要代表许多单元格的GUI,我已经写了如何做(如何使用颜色,大小等在屏幕上创建我想要的东西)。它包括诸如CellRepresentation,ShapeRepresentation和Bac

  • 这是我上一篇关于使用负值的特定条件规范化数据帧列的文章的继续。 我使用的DataFrame如下: 和Series的可能值是和所有正整数(包括)。我的目标是通过以下方式规范化两个列: 如果该值等于,则返回缺少的值 否则,对和之间范围内的剩余正整数进行规格化 我对埃兹雷尔的解决方案非常满意。话虽如此,我继续研究我的问题,看看是否能想出一个替代的解决方案。以下是我的尝试: 我正在定义以下函数: 不幸的是

  • 有人能给出一个建议吗?或者有没有其他方法也能达到同样的目的。 谢谢你。