[rabbitmq-discuss] Java client - com.rabbitmq.client.AlreadyClosedException and Shutdown event
josh
martin.rogan.inc at gmail.com
Thu Sep 26 12:05:42 BST 2013
The channel shutdownCompleted just refers to that particular channel. You
could have many other channels running quite happily and you don't need to
do anything. The other channels and any connection you're using are just
fine, as is the server. Do be careful not to use that channel again though
as it will just raise more errors.
I don't see you logging much about the error in your code sample. In
shutdownCompleted if you e.printStackTrace() the error message can be quite
detailed.
On Wednesday, September 18, 2013 12:55:21 PM UTC+1, Francois-Guillaume
Ribreau wrote:
>
> Hello,
>
> Since a week ago, I was having a lot of
> "com.rabbitmq.client.AlreadyClosedException: clean connection shutdown;
> reason: Attempt to use closed channel" the worst part was that the
> "DefaultExceptionHandler" was caught without being rethrowed, so I was
> unable to automatically restart my app when this occured. I updated to the
> last amqp-java client version but nothing changed.
>
> So I extended AMQConnection to specify my own exception handler in order
> to crash the app (with System.exit()) when this occured.
>
> public ExtendedAMQConnection(ConnectionFactory factory, Integer
> workerCount) throws Exception {
> super(factory.getUsername(),
> factory.getPassword(),
> new
> SocketFrameHandler(factory.getSocketFactory().createSocket(factory.getHost(),
> factory.getPort())),
> Executors.newFixedThreadPool(workerCount),
> factory.getVirtualHost(),
> factory.getClientProperties(),
> factory.getRequestedFrameMax(),
> factory.getRequestedChannelMax(),
> factory.getRequestedHeartbeat(),
> factory.getSaslConfig(),
> new DefaultExceptionHandler() {
> @Override
> public void handleConsumerException(Channel channel,
> Throwable
> exception,
> Consumer consumer,
> String consumerTag,
> String methodName)
> {
> try {
> // TODO: change this to call 4-parameter close
> and make 6-parm one private
> ((AMQConnection) channel.getConnection())
> .close(AMQP.INTERNAL_ERROR,
> "Internal error in Consumer "
> + consumerTag,
> false,
> exception,
> -1,
> false);
> } catch (Throwable e) {
> console.error("handleConsumerException", e);
> System.exit(1);
> }
> }
> });
> this.start();
> }
>
> But after some time I understood that it was not the main issue, the app
> was still throwing the same error without doing anything at all to fix it
> so I added a listener to channel shutdown event:
>
> Connection conn = new BringrAMQConnection(factory, workerCount);
> Channel channel = conn.createChannel();
> channel.addShutdownListener(new ShutdownListener() {
> @Override
> public void shutdownCompleted(ShutdownSignalException e) {
> console.error("RabbitMQ[channel] Shutdown. Stopping the
> server");
> System.exit(1);
> }
> });
>
> and now I got a lot of restarts. I'm not sure I clearly understood if I
> should do something when "shutdownCompleted" occurs (I never stopped
> RabbitMQ and RabbitMQ was always running when this happened), or if
> amqp-client can handle this by itself.
>
> I use com.rabbitmq:amqp-client:3.1.4 with a cluster of two mirrored
> RabbitMQ v3.1.1.
>
> # rabbitmqctl status
> Status of node rabbit at ir ...
> [{pid,19842},
> {running_applications,
> [{rabbitmq_management,"RabbitMQ Management Console","3.1.1"},
> {rabbitmq_management_agent,"RabbitMQ Management Agent","3.1.1"},
> {rabbit,"RabbitMQ","3.1.1"},
> {os_mon,"CPO CXC 138 46","2.2.9"},
> {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.1.1"},
> {webmachine,"webmachine","1.9.1-rmq3.1.1-git52e62bc"},
> {mochiweb,"MochiMedia Web Server","2.3.1-rmq3.1.1-gitd541e9a"},
> {xmerl,"XML parser","1.3.1"},
> {inets,"INETS CXC 138 49","5.9"},
> {amqp_client,"RabbitMQ AMQP Client","3.1.1"},
> {mnesia,"MNESIA CXC 138 12","4.7"},
> {sasl,"SASL CXC 138 11","2.2.1"},
> {stdlib,"ERTS CXC 138 10","1.18.1"},
> {kernel,"ERTS CXC 138 10","2.15.1"}]},
> {os,{unix,linux}},
> {erlang_version,
> "Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:24:24]
> [async-threads:30] [hipe] [kernel-poll:true]\n"},
> {memory,
> [{total,122151960},
> {connection_procs,22551824},
> {queue_procs,9699000},
> {plugins,415976},
> {other_proc,9745810},
> {mnesia,650608},
> {mgmt_db,10643096},
> {msg_index,431544},
> {other_ets,2452056},
> {binary,35320928},
> {code,18521111},
> {atom,2525529},
> {other_system,9194478}]},
> {vm_memory_high_watermark,0.4},
> {vm_memory_limit,27064667340},
> {disk_free_limit,1000000000},
> {disk_free,2864417656832},
> {file_descriptors,
> [{total_limit,924},
> {total_used,261},
> {sockets_limit,829},
> {sockets_used,227}]},
> {processes,[{limit,1048576},{used,2804}]},
> {run_queue,0},
> {uptime,8096817}]
>
> I'm able send you privately the output of rabbitmqctl report if you need
> it.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130926/5377d468/attachment.htm>
More information about the rabbitmq-discuss
mailing list