Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 警告id为的JdbcChannelMessageStore消息未被删除_Spring Integration - Fatal编程技术网

Spring integration 警告id为的JdbcChannelMessageStore消息未被删除

Spring integration 警告id为的JdbcChannelMessageStore消息未被删除,spring-integration,Spring Integration,我有一个由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

我有一个由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.0版本。这是我的春水

<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>


看来PostgreSQL不保证事务的独占读取,更新的
限制为1

无论如何,警告只是一个提示,其他进程已删除该消息。如果其他过程与轮询器类似,则不会复制任何内容:

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;
}
公共消息pollMessageFromGroup(对象组ID){
最终字符串键=getKey(groupId);
final Message polledMessage=this.dopollFormMessage(键);
if(polledMessage!=null){
如果(!this.doRemoveMessageFromGroup(groupId,polledMessage)){
返回null;
}
}
返回轮询消息;
}
您可以看到,如果消息未被删除,我们将返回
null
,因此此时无需轮询任何内容


您可以关闭
org.springframework.integration.jdbc.store.JdbcChannelMessageStore的警告级别,以避免在日志配置中将类别级别指定为
ERROR

看来,PostgreSQL不保证事务的独占读取,更新的
限制为1

无论如何,警告只是一个提示,其他进程已删除该消息。如果其他过程与轮询器类似,则不会复制任何内容:

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;
}
公共消息pollMessageFromGroup(对象组ID){
最终字符串键=getKey(groupId);
final Message polledMessage=this.dopollFormMessage(键);
if(polledMessage!=null){
如果(!this.doRemoveMessageFromGroup(groupId,polledMessage)){
返回null;
}
}
返回轮询消息;
}
您可以看到,如果消息未被删除,我们将返回
null
,因此此时无需轮询任何内容


您可以关闭org.springframework.integration.jdbc.store.jdbchannelmessagestore的警告级别,以避免在日志配置中将类别级别指定为
ERROR

谢谢!还有一个问题,是否需要池中的事务标记,或者可以避免?是的,请保留它。该调用中有两个sql表达式,因此最好将其包装到TX中。还要确保使用正确的TX管理器:JTA或DataSourceI添加了TX管理器并删除了事务标记,警告消失。有可能就是这样吗?拜托,如果你能让我看看这里的灯光,我会很感激的。不过我希望相反。如何添加税务经理?这在哪里适用?那你在哪里?对不起,我弄错了!我添加了tx经理,工作正常。我用两个实例进行了测试。一个带有tx manager+事务标记,另一个为原始标记。在第一种情况下,没有警告,在第二种情况下,会出现警告。稍后,将使用两个带有tx manager+事务标记的实例,并且不再出现警告。谢谢所有的阿泰姆!谢谢你,阿泰姆!还有一个问题,是否需要池中的事务标记,或者可以避免?是的,请保留它。该调用中有两个sql表达式,因此最好将其包装到TX中。还要确保使用正确的TX管理器:JTA或DataSourceI添加了TX管理器并删除了事务标记,警告消失。有可能就是这样吗?拜托,如果你能让我看看这里的灯光,我会很感激的。不过我希望相反。如何添加税务经理?这在哪里适用?那你在哪里?对不起,我弄错了!我添加了tx经理,工作正常。我用两个实例进行了测试。一个带有tx manager+事务标记,另一个为原始标记。在第一种情况下,没有警告,在第二种情况下,会出现警告。稍后,将使用两个带有tx manager+事务标记的实例,并且不再出现警告。谢谢所有的阿泰姆!