[
https://issues.jboss.org/browse/JBMESSAGING-1851?page=com.atlassian.jira....
]
Yong Hao Gao commented on JBMESSAGING-1851:
-------------------------------------------
Added two attributes to ConnectionFactory mbean.
1. MaxRetryChangeRate
Maximum attempts to retry sending change rate message for a consumer. Default is zero (no
retry).
This attribute is useful when there is some random network disturbance between a client
and the JBM server. A
JMS client can inform the JMS server to deliver more messages to it when there is no more
messages in the client
buffer, by sending a changeRate message to the server. If the changeRate message failed to
reach the server due to
a temporary network disturbance, the server won't start delivering messages to the
client and the client receives no
more messages even the messages at the server keep building up. With this parameter, the
client can retry sending
of the changeRate messages in case of failure so this issue can be greatly alleviated .
The valid values for this attribute are zero (default, no retry), -1 (retry forever), and
any positive long type number.
It is used together with attribute RetryChangeRateInterval.
2. RetryChangeRateInterval
Interval (milliseconds) between two attempts of retrying to send change rate message.
Default is 5000.
This attribute takes effect only if the MaxRetryChangeRate attribute is not zero.
Failure to send changeRate message results in idle client
---------------------------------------------------------
Key: JBMESSAGING-1851
URL:
https://issues.jboss.org/browse/JBMESSAGING-1851
Project: JBoss Messaging
Issue Type: Bug
Affects Versions: 1.4.0.SP3.CP09
Reporter: Justin Bertram
Assignee: Yong Hao Gao
If a client fails to send a changeRate message, e.g.:
ERROR [org.jboss.jms.client.container.ClientConsumer] Failed to send changeRate message
org.jboss.jms.exception.MessagingNetworkFailureException
at
org.jboss.jms.client.delegate.DelegateSupport.handleThrowable(DelegateSupport.java:245)
at
org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:205)
at
org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:160)
at
org.jboss.jms.client.delegate.ClientConsumerDelegate.org$jboss$jms$client$delegate$ClientConsumerDelegate$changeRate$aop(ClientConsumerDelegate.java:138)
at
org.jboss.jms.client.delegate.ClientConsumerDelegate$changeRate_N952316153687074823.invokeNext(ClientConsumerDelegate$changeRate_N952316153687074823.java)
at
org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.java:92)
at
org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105)
at
org.jboss.jms.client.delegate.ClientConsumerDelegate$changeRate_N952316153687074823.invokeNext(ClientConsumerDelegate$changeRate_N952316153687074823.java)
at
org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:172)
at
org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105)
at
org.jboss.jms.client.delegate.ClientConsumerDelegate$changeRate_N952316153687074823.invokeNext(ClientConsumerDelegate$changeRate_N952316153687074823.java)
at
org.jboss.jms.client.delegate.ClientConsumerDelegate.changeRate(ClientConsumerDelegate.java)
at
org.jboss.jms.client.container.ClientConsumer.sendChangeRateMessage(ClientConsumer.java:754)
at
org.jboss.jms.client.container.ClientConsumer.checkSendChangeRate(ClientConsumer.java:913)
at
org.jboss.jms.client.container.ClientConsumer.access$1300(ClientConsumer.java:56)
at
org.jboss.jms.client.container.ClientConsumer$ListenerRunner.run(ClientConsumer.java:1026)
at
org.jboss.messaging.util.OrderedExecutorFactory$ChildExecutor.run(OrderedExecutorFactory.java:104)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.rmi.MarshalException: Failed to communicate. Problem during
marshalling/unmarshalling; nested exception is:
java.io.EOFException
at
org.jboss.remoting.transport.socket.SocketClientInvoker.handleException(SocketClientInvoker.java:131)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.handleOtherException(MicroSocketClientInvoker.java:812)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:725)
at
org.jboss.remoting.transport.bisocket.BisocketClientInvoker.transport(BisocketClientInvoker.java:458)
at
org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:141)
at org.jboss.remoting.Client.invoke(Client.java:1935)
at org.jboss.remoting.Client.invoke(Client.java:788)
at org.jboss.remoting.Client.invoke(Client.java:776)
at
org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:189)
... 18 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at org.jboss.jms.wireformat.JMSWireFormat.read(JMSWireFormat.java:288)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:1036)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:694)
... 24 more
The server will never know that the client needs more messages. Therefore the client
will just sit there idle while messages on the server accumulate in its subscription.
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira