public void newChannel(String queue_id, AMQHandler task) throws IOException { channel = (ChannelN) connection.createChannel(); // channel.queueDeclare(queue_id, true, false, false, null); channel.basicQos(0); consumer = new QueueingConsumer(channel); channel.basicConsume(queue_id, false, consumer); task.setConsumer(consumer); thread_pool.execute(task); }
@Test public void openingTooManyChannels() throws Exception { int n = 48; try { Host.rabbitmqctl("eval 'application:set_env(rabbit, channel_max, " + n + ").'"); ConnectionFactory cf = TestUtils.connectionFactory(); Connection conn = cf.newConnection(); assertEquals(n, conn.getChannelMax()); for (int i = 1; i <= n; i++) { assertNotNull(conn.createChannel(i)); } // ChannelManager guards against channel.open being sent assertNull(conn.createChannel(n + 1)); // Construct a channel directly final ChannelN ch = new ChannelN( ((AutorecoveringConnection) conn).getDelegate(), n + 1, new ConsumerWorkService( Executors.newSingleThreadExecutor(), Executors.defaultThreadFactory(), ConnectionFactory.DEFAULT_SHUTDOWN_TIMEOUT)); conn.addShutdownListener( new ShutdownListener() { public void shutdownCompleted(ShutdownSignalException cause) { // make sure channel.open continuation is released ch.processShutdownSignal(cause, true, true); } }); ch.open(); fail("expected channel.open to cause a connection exception"); } catch (IOException e) { checkShutdownSignal(530, e); } finally { Host.rabbitmqctl("eval 'application:set_env(rabbit, channel_max, 0).'"); } }