Какой смысл иметь свойство «max-row» для входящего канала-адаптера, когда требуется компонент poller и у него есть свойство max-messages-per-poll? - PullRequest
0 голосов
/ 10 июня 2019

int-jdbc: входящему каналу-адаптеру нужен int: poller для работы, оба имеют max-row и max-messages-per-poll соответственно.

a) Почему для входящего канала-адаптера нужен poller,почему он не может иметь встроенный поллер по умолчанию?

b) Что, если max-row и max-messages-per-poll имеют разные значения?

c) Почему poller (osieSourcePollingChannelAdapter)продолжает опрашивать (или пытаться), когда набор сообщений опрашивается и обрабатывается?

<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 и заблокировал программу, установив точку останова на устройстве отображения строк.

Я заметил, что опросор продолжает опрашиватьБД (эти отладочные операторы повторялись), однако, он не выбирал никаких записей, поскольку адаптер входящего канала был заблокирован.

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 Ответ

0 голосов
/ 10 июня 2019

a) Вы можете определить опрашивающий по умолчанию (см. документацию ).

b) Максимальное количество строк - это способ ограничения количества выбранных строк.каждый опрос (полезная нагрузка сообщения представляет собой набор строк или сопоставленных объектов);max-messages-per-poll - это сколько раз опрашивать базу данных между интервалами опроса.

c) Это будет сделано только в том случае, если вы передадите работу другому потоку.Если вы обработаете результаты в потоке опросов, следующий опрос не произойдет, пока не закончится текущий.

Я не знаю, что вы подразумеваете под "... был заблокирован".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...