Thanks for the replies!

> I expect you are seeing the connection close after 300 seconds of
inactivity
That's right

> I've raised https://issues.apache.org/jira/browse/QPID-7670 to cover this
issue
Thank you

> to workaround this issue in v6.1 of the broker all you need to do is get
the *broker* to request the *client* to send "heartbeat" messages
Thanks, that workaround unblocks me.

> you'd also have to remove the "&amqp.idleTimeout=3600000"
If I remove the that parameter, the simple client program times out after
90 seconds:

javax.jms.JMSException: Transport closed due to the peer exceeding our
requested idle-timeout
[...]
Caused by: java.io.IOException: Transport closed due to the peer exceeding
our requested idle-timeout

If I set the idleTimeout to 100 seconds (in addition to the broker
heartBeatDelay=60 parameter), the client completes successfully. Is that
expected behavior?

> We plan to include this in Qpid Broker for Java 6.1.2.
Thank you

On Mon, Feb 13, 2017 at 3:23 AM Keith W <[email protected]> wrote:

> We plan to include this in Qpid Broker for Java 6.1.2.
>
> On 13 February 2017 at 11:04, Rob Godfrey <[email protected]> wrote:
> > As a colleague (thanks Robbie!) also pointed out to me, to workaround
> this
> > issue in v6.1 of the broker all you need to do is get the *broker* to
> > request the *client* to send "heartbeat" messages more frequently than
> the
> > Jetty timeout.  You can do this by adding your config.json to add a
> setting
> > for "connection.heartBeatDelay", setting it to 60 seconds for example:
> >
> > After such a change, my config.json start like this:
> >
> > {
> >   "id" : "91fedfad-7c78-4b1e-b78c-70be39433bea",
> >   "name" : "${broker.name}",
> >   "modelVersion" : "6.1",
> >   "connection.heartBeatDelay" : 60,
> >   "authenticationproviders" : [ {
> >
> >  ...
> >
> >
> > Since the broker for 6.1 doesn't respect client requested heartbeating
> > (until we fix that bug), you'd also have to remove the
> > "&amqp.idleTimeout=3600000" from you client connection URL... however
> > hopefully this is enough to get you going for the moment.
> >
> > Apologies you ran into this defect - we'll try to release a new version
> > including the fix as soon as possible.
> >
> > Hope this helps,
> > Rob
> >
> > On 13 February 2017 at 11:15, Rob Godfrey <[email protected]>
> wrote:
> >>
> >> I've raised https://issues.apache.org/jira/browse/QPID-7670 to cover
> this
> >> issue, and made a change on trunk which I believe will provide the
> expected
> >> behaviour wrt AMQP idle timeouts.
> >>
> >> -- Rob
> >>
> >> On 13 February 2017 at 00:04, Keith W <[email protected]> wrote:
> >>>
> >>> Hi Benjamin,
> >>>
> >>> This is a defect in the Qpid Broker for Java.  After running your
> >>> code, I expect you are seeing the connection close after 300 seconds
> >>> of inactivity.  This will be Jetty's
> >>> org.eclipse.jetty.websocket.WebSocketFactory#maxIdleTime default,
> >>> which is forcing the idle connection to close.  The Broker currently
> >>> provides no way to override this value.  To workaround you'd need to
> >>> find a way to keep the wire busy from the application (perhaps sending
> >>> an empty message, with a TTL, to a 'heartbeat' queue).
> >>>
> >>> The Broker ought to be respecting the peer's requested idle timeout
> >>> for websocket connections and ensuring that Jetty's maxIdleTime does
> >>> not interfere.  This currently is not implemented.
> >>>
> >>>
> >>>
> http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#doc-doc-idle-time-out
> >>>
> >>> Please raise a JIRA https://issues.apache.org/jira/browse/QPID.  There
> >>> is a defect fix release due on 6.1 soon, so it may be possible to
> >>> include this too.   Patches are always appreciated too.
> >>>
> >>> Kind regards, Keith.
> >>>
> >>>
> >>> On 11 February 2017 at 16:37, Benjamin Busjaeger <[email protected]>
> >>> wrote:
> >>> > Is there a way to keep JMS WebSocket connections open (e.g., enable
> >>> > ping/pong heartbeats)?
> >>> >
> >>> > I get the following error:
> >>> >
> >>> > javax.jms.JMSException: Transport connection remotely closed.
> >>> >
> >>> > at org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(
> >>> > JmsExceptionSupport.java:86)
> >>> >
> >>> > at org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(
> >>> > JmsExceptionSupport.java:108)
> >>> >
> >>> > at org.apache.qpid.jms.JmsConnection.onAsyncException(
> >>> > JmsConnection.java:1385)
> >>> >
> >>> > at org.apache.qpid.jms.JmsConnection.onProviderException(
> >>> > JmsConnection.java:1369)
> >>> >
> >>> > at org.apache.qpid.jms.JmsConnection.onConnectionFailure(
> >>> > JmsConnection.java:1237)
> >>> >
> >>> > at
> >>> > org.apache.qpid.jms.provider.amqp.AmqpProvider.fireProviderException(
> >>> > AmqpProvider.java:1015)
> >>> >
> >>> > at org.apache.qpid.jms.provider.amqp.AmqpProvider$20.run(
> >>> > AmqpProvider.java:830)
> >>> >
> >>> > at
> >>> >
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> >>> >
> >>> > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >>> >
> >>> > at
> >>> >
> >>> >
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(
> >>> > ScheduledThreadPoolExecutor.java:180)
> >>> >
> >>> > at
> >>> >
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(
> >>> > ScheduledThreadPoolExecutor.java:293)
> >>> >
> >>> > at java.util.concurrent.ThreadPoolExecutor.runWorker(
> >>> > ThreadPoolExecutor.java:1142)
> >>> >
> >>> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> >>> > ThreadPoolExecutor.java:617)
> >>> >
> >>> > at java.lang.Thread.run(Thread.java:745)
> >>> >
> >>> > Caused by: java.io.IOException: Transport connection remotely closed.
> >>> >
> >>> > ... 8 more
> >>> >
> >>> > With a relatively simple client program:
> >>> >
> >>> >             Context context = new InitialContext();
> >>> >
> >>> >
> >>> >             ConnectionFactory factory = (ConnectionFactory)
> >>> > context.lookup(
> >>> > "myFactoryLookup");
> >>> >
> >>> >             Destination queue = (Destination)
> >>> > context.lookup("myQueueLookup"
> >>> > );
> >>> >
> >>> >
> >>> >             Connection connection = factory.createConnection("admin",
> >>> > "admin");
> >>> >
> >>> >             connection.setExceptionListener(new
> MyExceptionListener());
> >>> >
> >>> > //            connection.start();
> >>> >
> >>> >
> >>> >             Session session = connection.createSession(false,
> Session.
> >>> > AUTO_ACKNOWLEDGE);
> >>> >
> >>> >             session.createProducer(queue);
> >>> >
> >>> >             Thread.sleep(360000);
> >>> >
> >>> > jndi properties:
> >>> >
> >>> > java.naming.factory.initial =
> >>> > org.apache.qpid.jms.jndi.JmsInitialContextFactory
> >>> >
> >>> > connectionfactory.myFactoryLookup = amqpws://localhost
> >>> > :5000?amqp.vhost=default&amqp.idleTimeout=3600000
> >>> >
> >>> > queue.myQueueLookup = Q1
> >>> >
> >>> > Server version: qpid - 6.1.1 build: 1775107 (AMQP version(s)
> >>> > [major.minor]:
> >>> > 0-8, 0-9, 0-9-1, 0-10, 1.0)
> >>> > Client version: qpid-jms-client-0.20.0 with proton-j-0.16.0
> >>> >
> >>> > Thanks,
> >>> > Ben
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: [email protected]
> >>> For additional commands, e-mail: [email protected]
> >>>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to