具有JNDI配置的JAVA jms队列,空闲15分钟后未读取消息

具有JNDI配置的JAVA jms队列,空闲15分钟后未读取消息,java,queue,jms,spring-jms,jboss-4.2.x,Java,Queue,Jms,Spring Jms,Jboss 4.2.x,JMS队列已通过JMS服务器使用jndi配置,并且是凭据/连接池驱动的。我们在使用队列时观察到一个问题。当我们在队列中接收到连续消息时,侦听器应用程序能够立即读取消息,但当两条消息之间的延迟(空闲时间)为15分钟时,消息不会从队列中读取(即使队列中添加了更多的新消息,这可以在jms管理控制台中看到) 若侦听器应用程序重新启动或jms服务器重新启动,将读取队列消息。Jboss版本是Jboss 4.3.0.GA_CP10(build:SVNTag=JBPAPP_4_3_0_GA_CP10 date=

JMS队列已通过JMS服务器使用jndi配置,并且是凭据/连接池驱动的。我们在使用队列时观察到一个问题。当我们在队列中接收到连续消息时,侦听器应用程序能够立即读取消息,但当两条消息之间的延迟(空闲时间)为15分钟时,消息不会从队列中读取(即使队列中添加了更多的新消息,这可以在jms管理控制台中看到)

若侦听器应用程序重新启动或jms服务器重新启动,将读取队列消息。Jboss版本是Jboss 4.3.0.GA_CP10(build:SVNTag=JBPAPP_4_3_0_GA_CP10 date=201107201825)

请让我知道,JMS服务器jndi配置更改可能有助于解决此问题。最初的想法是向JMS服务器配置中添加以下属性,这些属性将执行重试操作

jboss messaging(JBM)或jboss remoting(JBRM)中的升级是否有帮助?如果有,请分享我如何检查它们的当前版本,在哪里可以找到service pack/upgrade/patch,以及它是否与我的jboss版本兼容

参考网址:

-1
3000
请查找以下配置 JMS服务器JNDI配置:

<mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
  name="jboss.messaging.connectionfactory:service=ClusteredConnectionFactory"
  xmbean-dd="xmdesc/ConnectionFactory-xmbean.xml">
  <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
  <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=sslbisocket</depends>
  <depends>jboss.messaging:service=PostOffice</depends>

  <attribute name="JNDIBindings">
     <bindings>
        <binding>/ClusteredConnectionFactory</binding>
        <binding>/ClusteredXAConnectionFactory</binding>
        <binding>java:/ClusteredConnectionFactory</binding>
        <binding>java:/ClusteredXAConnectionFactory</binding>
     </bindings>
  </attribute>

  <attribute name="SupportsFailover">true</attribute>
  <attribute name="SupportsLoadBalancing">true</attribute>      
  <attribute name="LoadBalancingFactory">org.jboss.jms.client.plugin.RoundRobinLoadBalancingFactory</attribute>  
  <attribute name="DisableRemotingChecks">true</attribute>
  <attribute name="MinTimeoutProcessTime">5000</attribute>
</mbean>
<jms:listener-container connection-factory="jmsConnectionFactory" destination-resolver="jmsDestinationResolver" acknowledge="auto" client-id="xyz" >
  <jms:listener destination="destination" ref="listener" method="onMessage" id="listener" />         
</jms:listener-container>

<bean id="listener" class="package.Listener" ></bean> 

<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.BeanFactoryDestinationResolver" />

<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate">
    <ref bean="jndiTemplate" />
  </property>
  <property name="jndiName" value="${jms.destination}" />
</bean>

<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
  <property name="targetConnectionFactory" ref="cachedConnectionFactory" />
  <property name="username" value="${jms.userName}" />
  <property name="password" value="${jms.password}"  />
</bean>

<bean id="cachedConnectionFactory" class="package.CachedConnectionFactory">
  <constructor-arg index="0" ref="nativeConnectionFactory" />
  <constructor-arg index="1" value="2" />
  <constructor-arg index="2" value="60000" />
</bean>

<bean id="nativeConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate">
    <ref bean="jndiTemplate" />
  </property>
  <property name="jndiName" value="${clusteredConnectionFactory}" />
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
    <props>
      <prop key="java.naming.provider.url">${url}</prop>
      <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
      <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
    </props>
  </property>
</bean>

消息传递:service=ServerPeer
消息传递:服务=连接器,传输=sslbisocket
jboss.messaging:service=邮局
/集群连接工厂
/ClusteredX连接工厂
java:/ClusteredConnectionFactory
java:/ClusteredXAConnectionFactory
真的
真的
org.jboss.jms.client.plugin.RoundRobinLoadBalancingFactory
真的
5000
应用程序spring配置:

<mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
  name="jboss.messaging.connectionfactory:service=ClusteredConnectionFactory"
  xmbean-dd="xmdesc/ConnectionFactory-xmbean.xml">
  <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
  <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=sslbisocket</depends>
  <depends>jboss.messaging:service=PostOffice</depends>

  <attribute name="JNDIBindings">
     <bindings>
        <binding>/ClusteredConnectionFactory</binding>
        <binding>/ClusteredXAConnectionFactory</binding>
        <binding>java:/ClusteredConnectionFactory</binding>
        <binding>java:/ClusteredXAConnectionFactory</binding>
     </bindings>
  </attribute>

  <attribute name="SupportsFailover">true</attribute>
  <attribute name="SupportsLoadBalancing">true</attribute>      
  <attribute name="LoadBalancingFactory">org.jboss.jms.client.plugin.RoundRobinLoadBalancingFactory</attribute>  
  <attribute name="DisableRemotingChecks">true</attribute>
  <attribute name="MinTimeoutProcessTime">5000</attribute>
</mbean>
<jms:listener-container connection-factory="jmsConnectionFactory" destination-resolver="jmsDestinationResolver" acknowledge="auto" client-id="xyz" >
  <jms:listener destination="destination" ref="listener" method="onMessage" id="listener" />         
</jms:listener-container>

<bean id="listener" class="package.Listener" ></bean> 

<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.BeanFactoryDestinationResolver" />

<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate">
    <ref bean="jndiTemplate" />
  </property>
  <property name="jndiName" value="${jms.destination}" />
</bean>

<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
  <property name="targetConnectionFactory" ref="cachedConnectionFactory" />
  <property name="username" value="${jms.userName}" />
  <property name="password" value="${jms.password}"  />
</bean>

<bean id="cachedConnectionFactory" class="package.CachedConnectionFactory">
  <constructor-arg index="0" ref="nativeConnectionFactory" />
  <constructor-arg index="1" value="2" />
  <constructor-arg index="2" value="60000" />
</bean>

<bean id="nativeConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate">
    <ref bean="jndiTemplate" />
  </property>
  <property name="jndiName" value="${clusteredConnectionFactory}" />
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
    <props>
      <prop key="java.naming.provider.url">${url}</prop>
      <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
      <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
    </props>
  </property>
</bean>

${url}
接口:org.jboss.naming
org.jnp.interfaces.NamingContextFactory