Transactions DMLC中SessionTransact=true和SessionTransact=false之间的差异
通过谷歌搜索,我知道如果我使用sessionTransact=false,DMLC将使用确认模式(自动、客户端等),如果我使用sessionTransact=true,它将在侦听器执行后执行session.commit 我看到了两种模式之间的巨大性能差异。与sessionTransact=true相比,sessionTransact=false给了我很多性能提升。 我使用非持久性消息传递和ActiveMQ作为JMS提供程序。我使用spring DMLC来消费消息 根据这一点,应该没有太大区别,因为session.commit和Message.acknowledge都是阻塞调用 两个问题:Transactions DMLC中SessionTransact=true和SessionTransact=false之间的差异,transactions,jms,activemq,spring-jms,Transactions,Jms,Activemq,Spring Jms,通过谷歌搜索,我知道如果我使用sessionTransact=false,DMLC将使用确认模式(自动、客户端等),如果我使用sessionTransact=true,它将在侦听器执行后执行session.commit 我看到了两种模式之间的巨大性能差异。与sessionTransact=true相比,sessionTransact=false给了我很多性能提升。 我使用非持久性消息传递和ActiveMQ作为JMS提供程序。我使用spring DMLC来消费消息 根据这一点,应该没有太大区别,因
<!-- ActiveMQ connection factory to establish connection with broker. -->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${broker.url}"/>
</bean>
<!-- Wrap in a pool to avoid creating a connection per send. -->
<bean id="consumerJmsConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="maxConnections" value="6" /> <!-- Default is 1 ! -->
</bean>
最大连接计数为6,因为我有其他DMLC使用相同的池连接工厂
DMLC:
在我将SessionTransact设置为false后,DMLC能够快速处理消息。这正是让我好奇的地方。我没有答案,但如果您不使用事务,并且不希望消息丢失(在侦听器失败的情况下),您应该使用SimpleMessageListenerContainer而不是DMLC,因为后者会在调用侦听器之前确认消息。根据,如果我使用自动确认模式,DMLC也会在调用侦听器之前确认。是;我就是这么说的。SMLC在侦听器返回后确认。很抱歉我误读了你的评论。在我的例子中,如果消息在侦听器调用之前被确认,那么tts是可以的。根据本文的讨论,在侦听器执行完成之前,不会调用receive(),因此可以。但是,如果侦听器崩溃或断电,消息将丢失。
<!-- Message listener container to receive messages from JshProxy. -->
<bean id="jshProxyListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:connectionFactory-ref="consumerJmsConnectionFactory"
p:destination-ref="jshProxyPushTopic"
p:pubSubDomain="true"
p:subscriptionDurable="false"
p:sessionTransacted="false"
p:clientId="${cometd.jshProxyPush.clientId}"
p:messageListener-ref="cometDActiveMQListener"/>