WARN JdbcChannelMessageStore Сообщение с идентификатором не было удалено - PullRequest
0 голосов
/ 14 марта 2020

У меня есть канал очереди, поддерживаемый JdbcChannelMessageStore. У меня есть два экземпляра этого приложения, и с высоким параллелизмом у меня есть это предупреждение:

2020-03-13 19:25:38,209 task-scheduler-5  WARN JdbcChannelMessageStore:652 - Message with id '06b73eab-727a-780f-d0fa-1b0e0dd1ea20' was not deleted.

Есть ли способ удалить их?

Насколько я понимаю, сообщения читаются дважды, я прав?

Я использую SI 4.3.19.RELEASE. Вот мой весенний поток

<int:channel id="channel">
        <int:queue message-store="messageStoreBean"/>
</int:channel>

<int:header-value-router input-channel="channel 
        header-name="name" >
        <int:poller max-messages-per-poll="2" fixed-rate="500" >
            <int:transactional />
        </int:poller>
        ...
</int:header-value-router>

<bean id="storeQueryProviderBean" class="org.springframework.integration.jdbc.store.channel.PostgresChannelMessageStoreQueryProvider" />

    <bean id="messageStoreBean" class="org.springframework.integration.jdbc.store.JdbcChannelMessageStore">
        <property name="dataSource" ref="messageStoreDataSource" />
        <property name="channelMessageStoreQueryProvider" ref="storeQueryProviderBean" />
        <property name="region" value="region" />
    </bean>

1 Ответ

2 голосов
/ 14 марта 2020

Похоже, PostgreSQL не гарантирует эксклюзивного чтения с транзакциями и LIMIT 1 FOR UPDATE.

В любом случае, WARN - это просто примечание, что какой-то другой процесс удалил сообщение. Ничто не дублируется, если другой процесс похож на этот опросчик:

public Message<?> pollMessageFromGroup(Object groupId) {

    final String key = getKey(groupId);
    final Message<?> polledMessage = this.doPollForMessage(key);

    if (polledMessage != null) {
        if (!this.doRemoveMessageFromGroup(groupId, polledMessage)) {
            return null;
        }
    }

    return polledMessage;
}

Вы видите, что если сообщение не было удалено, мы возвращаем null, поэтому на данный момент ничего не запрашиваем.

Вы можете отключите уровень предупреждения для org.springframework.integration.jdbc.store.JdbcChannelMessageStore, чтобы в этом сообщении не указывалось значение категории как ERROR в конфигурации журнала.

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