Example usage for com.rabbitmq.client Channel queueBind

List of usage examples for com.rabbitmq.client Channel queueBind

Introduction

In this page you can find the example usage for com.rabbitmq.client Channel queueBind.

Prototype

Queue.BindOk queueBind(String queue, String exchange, String routingKey) throws IOException;

Source Link

Document

Bind a queue to an exchange, with no extra arguments.

Usage

From source file:dreamteamxmltranslator.Translator.java

public static void main(String[] args) throws IOException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("datdb.cphbusiness.dk");
    factory.setUsername("Dreamteam");
    factory.setPassword("bastian");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(LISTENING_QUEUE_NAME, false, false, false, null);
    channel.queueBind(LISTENING_QUEUE_NAME, EXCHANGE_NAME, "DreamTeamBankXML");

    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    Consumer consumer = new DefaultConsumer(channel) {
        @Override//w w w.j  av  a 2  s .  c  o  m
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                byte[] body) throws IOException {
            try {
                message = new String(body, "UTF-8");
                System.out.println(" [x] Received '" + message + "'");

                String[] arr = message.split(",");
                tester(arr);
            } catch (IOException_Exception ex) {
                Logger.getLogger(Translator.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    };
    channel.basicConsume(LISTENING_QUEUE_NAME, true, consumer);

}

From source file:edu.jhu.pha.vospace.jobs.JobsProcessorQueuedImpl.java

License:Apache License

@Override
public void run() {
    final JobsProcessor parentProc = this;
    QueueConnector.goAMQP("submitJob", new QueueConnector.AMQPWorker<Boolean>() {
        @Override// ww w  .  j av a 2  s .com
        public Boolean go(com.rabbitmq.client.Connection conn, com.rabbitmq.client.Channel channel)
                throws IOException {

            channel.exchangeDeclare(conf.getString("transfers.exchange.submited"), "topic", true);

            channel.queueDeclare(conf.getString("transfers.queue.submited.server_initialised"), true, false,
                    false, null);

            channel.queueBind(conf.getString("transfers.queue.submited.server_initialised"),
                    conf.getString("transfers.exchange.submited"),
                    "direction." + JobDescription.DIRECTION.PUSHFROMVOSPACE);
            channel.queueBind(conf.getString("transfers.queue.submited.server_initialised"),
                    conf.getString("transfers.exchange.submited"),
                    "direction." + JobDescription.DIRECTION.PULLTOVOSPACE);
            channel.queueBind(conf.getString("transfers.queue.submited.server_initialised"),
                    conf.getString("transfers.exchange.submited"),
                    "direction." + JobDescription.DIRECTION.LOCAL);

            QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume(conf.getString("transfers.queue.submited.server_initialised"), false,
                    consumer);

            try {
                // The main cycle to process the jobs
                while (!jobsThread.isInterrupted()) {

                    for (Iterator<Future<STATE>> it = workers.iterator(); it.hasNext();) {
                        Future<STATE> next = it.next();
                        if (next.isDone()) {
                            it.remove();
                            logger.debug("Job " + next + " is removed from the workers.");
                        }
                    }

                    if (workers.size() >= jobsPoolSize) {
                        logger.debug("Waiting for a jobs pool, size: " + workers.size());
                        synchronized (JobsProcessor.class) {
                            JobsProcessor.class.wait();
                        }
                        logger.debug("End waiting for a jobs pool, size: " + workers.size());
                    } else {
                        logger.debug("Waiting for a job");
                        QueueingConsumer.Delivery delivery = consumer.nextDelivery();

                        // Job JSON notation
                        JobDescription job = (new ObjectMapper()).readValue(delivery.getBody(), 0,
                                delivery.getBody().length, JobDescription.class);

                        logger.debug("There's a submited job! " + job.getId());

                        TransferThread thread = new TransferThread(job, parentProc);

                        Future<STATE> future = service.submit(thread);

                        workers.add(future);
                        channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
                    }
                }
            } catch (InterruptedException ex) {
                // server restarted
            }

            return true;
        }
    });

}

From source file:edu.jhu.pha.vospace.process.NodeProcessor.java

License:Apache License

@Override
public void run() {
    QueueConnector.goAMQP("nodesProcessor", new QueueConnector.AMQPWorker<Boolean>() {
        @Override//from  w w w . j  a  v a 2 s  . co m
        public Boolean go(com.rabbitmq.client.Connection conn, com.rabbitmq.client.Channel channel)
                throws IOException {

            channel.exchangeDeclare(conf.getString("process.exchange.nodeprocess"), "fanout", true);
            channel.exchangeDeclare(conf.getString("vospace.exchange.nodechanged"), "fanout", false);

            channel.queueDeclare(conf.getString("process.queue.nodeprocess"), true, false, false, null);

            channel.queueBind(conf.getString("process.queue.nodeprocess"),
                    conf.getString("process.exchange.nodeprocess"), "");

            QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume(conf.getString("process.queue.nodeprocess"), false, consumer);

            while (!Thread.currentThread().isInterrupted()) {

                Node node = null;

                try {
                    QueueingConsumer.Delivery delivery = consumer.nextDelivery();

                    Map<String, Object> nodeData = (new ObjectMapper()).readValue(delivery.getBody(), 0,
                            delivery.getBody().length, new TypeReference<HashMap<String, Object>>() {
                            });

                    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
                    node = NodeFactory.getNode(new VospaceId((String) nodeData.get("uri")),
                            (String) nodeData.get("owner"));

                    logger.debug("Node changed: " + nodeData.get("uri") + " " + nodeData.get("owner") + " "
                            + node.getType());

                    switch (node.getType()) {
                    case DATA_NODE:
                    case STRUCTURED_DATA_NODE:
                    case UNSTRUCTURED_DATA_NODE: {
                        TikaInputStream inp = null;
                        try {
                            Metadata detectTikaMeta = new Metadata();
                            detectTikaMeta.set(Metadata.RESOURCE_NAME_KEY,
                                    node.getUri().getNodePath().getNodeName());
                            inp = TikaInputStream.get(node.exportData());
                            //MediaType type = new DefaultDetector().detect(inp, nodeTikaMeta);
                            List<Detector> list = new ArrayList<Detector>();
                            list.add(new SimulationDetector());
                            list.add(new DefaultDetector());
                            Detector detector = new CompositeDetector(list);

                            MediaType type = detector.detect(inp, detectTikaMeta);
                            node.getNodeInfo().setContentType(type.toString());
                            node.getMetastore().storeInfo(node.getUri(), node.getNodeInfo());

                            JsonNode credentials = UserHelper.getProcessorCredentials(node.getOwner());

                            boolean makeStructured = false;

                            List<String> externalLinks = new ArrayList<String>();
                            for (ProcessorConfig processorConf : ProcessingFactory.getInstance()
                                    .getProcessorConfigsForNode(node, credentials)) {
                                Metadata nodeTikaMeta = new Metadata();
                                nodeTikaMeta.set(TikaCoreProperties.SOURCE, node.getUri().toString());
                                nodeTikaMeta.set("owner", (String) nodeData.get("owner"));
                                nodeTikaMeta.set(TikaCoreProperties.TITLE,
                                        node.getUri().getNodePath().getNodeName());
                                nodeTikaMeta.add(TikaCoreProperties.METADATA_DATE, dateFormat
                                        .format(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime()));

                                nodeTikaMeta.set(Metadata.CONTENT_LOCATION,
                                        ((DataNode) node).getHttpDownloadLink().toASCIIString());
                                nodeTikaMeta.set(Metadata.CONTENT_TYPE, type.toString());

                                AbstractParser parser;
                                TikaConfig config = TikaConfig.getDefaultConfig();
                                if (processorConf.getTikaConfig() != null) {
                                    config = new TikaConfig(
                                            getClass().getResourceAsStream(processorConf.getTikaConfig()));
                                }

                                parser = new CompositeParser(config.getMediaTypeRegistry(), config.getParser());

                                Processor processor = Processor.fromProcessorConfig(processorConf);

                                InputStream str = null;
                                try {
                                    str = TikaInputStream.get(node.exportData());
                                    parser.parse(str, processor.getContentHandler(), nodeTikaMeta,
                                            new ParseContext());
                                } finally {
                                    try {
                                        str.close();
                                    } catch (Exception ex) {
                                    }
                                }

                                // now do out-of-tika processing of results
                                try {
                                    processor.processNodeMeta(nodeTikaMeta,
                                            credentials.get(processorConf.getId()));
                                    logger.debug("Processing of " + node.getUri().toString() + " is finished.");

                                } catch (Exception e) {
                                    logger.error("Error processing the node. " + e.getMessage());
                                    e.printStackTrace();
                                    processError(node, e);
                                }

                                String[] links = nodeTikaMeta.getValues("EXTERNAL_LINKS");

                                if (null != links && links.length > 0) {
                                    externalLinks.addAll(Arrays.asList(links));
                                }

                                MediaType curType = MediaType.parse(nodeTikaMeta.get(Metadata.CONTENT_TYPE));
                                if (MIME_REGISTRY.isSpecializationOf(curType, type)) {
                                    type = curType;
                                    logger.debug("Media type reassigned to " + type.toString() + " by "
                                            + processorConf.getId());
                                }

                                String nodeTypeStr = nodeTikaMeta.get("NodeType");
                                if (null != nodeTypeStr
                                        && NodeType.valueOf(nodeTypeStr).equals(NodeType.STRUCTURED_DATA_NODE))
                                    makeStructured = true;
                            }

                            node.makeNodeStructured(makeStructured);

                            Map<String, String> properties = new HashMap<String, String>();
                            properties.put(PROCESSING_PROPERTY, "done");
                            if (externalLinks.size() > 0) {
                                properties.put(EXTERNAL_LINK_PROPERTY, StringUtils.join(externalLinks, ' '));
                            }
                            node.getNodeInfo().setContentType(type.toString());

                            node.getMetastore().updateUserProperties(node.getUri(), properties);
                            node.getMetastore().storeInfo(node.getUri(), node.getNodeInfo());

                            logger.debug("Updated node " + node.getUri().toString() + " to "
                                    + node.getNodeInfo().getContentType() + " and "
                                    + node.getNodeInfo().getSize());

                            // update node's container size metadata
                            try {
                                ContainerNode contNode = (ContainerNode) NodeFactory.getNode(
                                        new VospaceId(
                                                new NodePath(node.getUri().getNodePath().getContainerName())),
                                        node.getOwner());
                                node.getStorage().updateNodeInfo(contNode.getUri().getNodePath(),
                                        contNode.getNodeInfo());
                                node.getMetastore().storeInfo(contNode.getUri(), contNode.getNodeInfo());
                            } catch (URISyntaxException e) {
                                logger.error("Updating root node size failed: " + e.getMessage());
                            }

                            try {
                                nodeData.put("container",
                                        node.getUri().getNodePath().getParentPath().getNodeStoragePath());
                                byte[] jobSer = (new ObjectMapper()).writeValueAsBytes(nodeData);
                                channel.basicPublish(conf.getString("vospace.exchange.nodechanged"), "", null,
                                        jobSer);
                            } catch (IOException e) {
                                logger.error(e);
                            }
                        } catch (TikaException ex) {
                            logger.error("Error parsing the node " + node.getUri().toString() + ": "
                                    + ex.getMessage());
                            processError(node, ex);
                            ex.printStackTrace();
                        } catch (SAXException ex) {
                            logger.error("Error SAX parsing the node " + node.getUri().toString() + ": "
                                    + ex.getMessage());
                            processError(node, ex);
                        } catch (IOException ex) {
                            logger.error("Error reading the node " + node.getUri().toString() + ": "
                                    + ex.getMessage());
                            processError(node, ex);
                        } finally {
                            try {
                                inp.close();
                            } catch (Exception ex2) {
                            }
                            ;
                        }

                        break;
                    }
                    case CONTAINER_NODE: {
                        //                           DbPoolServlet.goSql("Processing nodes",
                        //                               "select * from nodes where owner = ?)",
                        //                                 new SqlWorker<Boolean>() {
                        //                                     @Override
                        //                                     public Boolean go(java.sql.Connection conn, java.sql.PreparedStatement stmt) throws SQLException {
                        //                                        stmt.setString(1, node.getOwner());
                        //                                         /*ResultSet resSet = stmt.executeQuery();
                        //                                         while(resSet.next()) {
                        //                                            String uriStr = resSet.getString(1);
                        //                                            String username = resSet.getString(2);
                        //                                            
                        //                                            try {
                        //                                               VospaceId uri = new VospaceId(uriStr);
                        //                                               
                        //                                               Node newNode = NodeFactory.getInstance().getNode(uri, username);
                        //                                               newNode.remove();
                        //                                            } catch(Exception ex) {
                        //                                               ex.printStackTrace();
                        //                                            }
                        //                                         }*/
                        //                                        return true;
                        //                                     }
                        //                                 }
                        //                        
                        //                            );
                        break;
                    }
                    default: {
                        break;
                    }
                    }

                } catch (InterruptedException ex) {
                    logger.error("Sleeping interrupted. " + ex.getMessage());
                    processError(node, ex);
                } catch (IOException ex) {
                    ex.printStackTrace();
                    logger.error("Error reading the changed node JSON: " + ex.getMessage());
                    processError(node, ex);
                } catch (URISyntaxException ex) {
                    logger.error("Error parsing VospaceId from changed node JSON: " + ex.getMessage());
                    processError(node, ex);
                }
            }

            return true;
        }
    });

}

From source file:edu.kit.dama.util.test.RabbitMQReceiver.java

License:Apache License

public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    final Connection connection = factory.newConnection();
    final Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, EXCHANGE_NAME, "audit.*");

    //  channel.queueDeclare(QUEUE_NAME, true, false, false, null);
    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    /*  final Consumer consumer = new DefaultConsumer(channel) {
    @Override/*from  w  ww .j  av a 2  s  .  co m*/
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    String message = new String(body, "UTF-8");
            
    System.out.println(" [x] Received '" + message + "'");
    try {
      doWork(message);
    } finally {
      System.out.println(" [x] Done");
      channel.basicAck(envelope.getDeliveryTag(), false);
    }
    }
    };
    channel.basicConsume(TASK_QUEUE_NAME, false, consumer);
    }*/
    /*   QueueingConsumer consumer = new QueueingConsumer(channel);
            
           /*Consumer consumer = new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope,
            AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println(" [x] Received '" + message + "'");
    }
           };*/
    /*channel.basicConsume(queueName, true, consumer);
           QueueingConsumer.Delivery delivery = consumer.nextDelivery(10000);
           if (delivery != null) {
    byte[] message = delivery.getBody();
    System.out.println("MESS " + new String(message));
           }*/
    Consumer consumer = new DefaultConsumer(channel) {
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                byte[] body) throws IOException {
            String message = new String(body, "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        }
    };
    channel.basicConsume(queueName, true, consumer);

    // System.exit(0);
}

From source file:es.devcircus.rabbitmq_examples.rabbitmq_publish_subscribe.ReceiveLog.java

License:Open Source License

/**
 *
 * @param argv//from  w w w .  j  a v  a  2  s .  c o m
 * @throws Exception
 */
public static void main(String[] argv) throws Exception {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, EXCHANGE_NAME, "");

    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(queueName, true, consumer);

    while (true) {
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        String message = new String(delivery.getBody());

        System.out.println(" [x] Received '" + message + "'");
    }
}

From source file:es.devcircus.rabbitmq_examples.rabbitmq_routing.ReceiveLogsDirect.java

License:Open Source License

/**
 *
 * @param argv/*from  w  w w. ja  va 2s . com*/
 * @throws Exception
 */
public static void main(String[] argv) throws Exception {

    ConnectionFactory factory = new ConnectionFactory();
    //        factory.setHost("localhost");
    factory.setHost("192.168.0.202");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "direct");
    String queueName = channel.queueDeclare().getQueue();

    if (argv.length < 1) {
        System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]");
        System.exit(1);
    }

    for (String severity : argv) {
        channel.queueBind(queueName, EXCHANGE_NAME, severity);
    }

    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(queueName, true, consumer);

    while (true) {
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        String message = new String(delivery.getBody());
        String routingKey = delivery.getEnvelope().getRoutingKey();

        System.out.println(" [x] Received '" + routingKey + "':'" + message + "'");
    }
}

From source file:es.devcircus.rabbitmq_examples.rabbitmq_topics.ReceiveLogsTopic.java

License:Open Source License

/**
 * //from w  w w  . ja  v a2  s .  c om
 * @param argv 
 */
public static void main(String[] argv) {
    Connection connection = null;
    Channel channel = null;
    try {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        connection = factory.newConnection();
        channel = connection.createChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, "topic");
        String queueName = channel.queueDeclare().getQueue();

        if (argv.length < 1) {
            System.err.println("Usage: ReceiveLogsTopic [binding_key]...");
            System.exit(1);
        }

        for (String bindingKey : argv) {
            channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);
        }

        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            String routingKey = delivery.getEnvelope().getRoutingKey();

            System.out.println(" [x] Received '" + routingKey + "':'" + message + "'");
        }
    } catch (IOException | InterruptedException | ShutdownSignalException | ConsumerCancelledException e) {
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception ignore) {
            }
        }
    }
}

From source file:eu.betaas.rabbitmq.subscriber.SubscriberService.java

License:Apache License

public void startService() {
    try {//  ww w  .ja  v a  2  s  . com
        log.info("#Starting queue #");
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection;
        log.info("#Starting #");
        connection = factory.newConnection();
        log.info("#Starting connection#");
        Channel channel = connection.createChannel();

        channel.exchangeDeclare(ename, mode);
        String queueName = channel.queueDeclare().getQueue();
        channel.queueBind(queueName, ename, bussubkey);
        log.info("#Starting connection on queue #");
        consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        log.info("#Running #");
        run();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ShutdownSignalException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ConsumerCancelledException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:genqa.ExportRabbitMQVerifier.java

License:Open Source License

public void run() throws IOException, InterruptedException {
    final Connection connection = m_connFactory.newConnection();
    final Channel channel = connection.createChannel();

    try {//from   www  .  j a v  a 2s  .  c om
        channel.exchangeDeclare(m_exchangeName, "topic", true);
        String dataQueue = channel.queueDeclare().getQueue();
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_PARTITIONED_TABLE.#");
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_PARTITIONED_TABLE2.#");
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_REPLICATED_TABLE.#");
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_PARTITIONED_TABLE_FOO.#");
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_PARTITIONED_TABLE2_FOO.#");
        channel.queueBind(dataQueue, m_exchangeName, "EXPORT_REPLICATED_TABLE_FOO.#");
        String doneQueue = channel.queueDeclare().getQueue();
        channel.queueBind(doneQueue, m_exchangeName, "EXPORT_DONE_TABLE.#");
        channel.queueBind(doneQueue, m_exchangeName, "EXPORT_DONE_TABLE_FOO.#");

        // Setup callback for data stream
        channel.basicConsume(dataQueue, false, createConsumer(channel));

        // Setup callback for the done message
        QueueingConsumer doneConsumer = new QueueingConsumer(channel);
        channel.basicConsume(doneQueue, true, doneConsumer);

        // Wait until the done message arrives, then verify count
        final QueueingConsumer.Delivery doneMsg = doneConsumer.nextDelivery();
        final long expectedRows = Long.parseLong(ExportOnServerVerifier.RoughCSVTokenizer
                .tokenize(new String(doneMsg.getBody(), Charsets.UTF_8))[6]);

        while (expectedRows > m_verifiedRows) {
            Thread.sleep(1000);
            System.err.println("Expected " + expectedRows + " " + m_verifiedRows);
        }
    } finally {
        tearDown(channel);
        channel.close();
        connection.close();
    }
}

From source file:info.pancancer.arch3.reporting.Arch3ReportImpl.java

License:Open Source License

@Override
public Map<String, Status> getLastStatus() {
    String queueName = settings.getString(Constants.RABBIT_QUEUE_NAME);
    final String resultQueueName = queueName + "_results";
    String resultsQueue = null;//  ww w.  j  a  va2 s .co  m

    Channel resultsChannel = null;
    synchronized (Arch3ReportImpl.this) {
        try {
            // read from
            resultsChannel = Utilities.setupExchange(settings, resultQueueName);
            // this declares a queue exchange where multiple consumers get the same convertToResult:
            // https://www.rabbitmq.com/tutorials/tutorial-three-java.html
            resultsQueue = Utilities.setupQueueOnExchange(resultsChannel, queueName, "SlackReportBot");
            resultsChannel.queueBind(resultsQueue, resultQueueName, "");
            QueueingConsumer resultsConsumer = new QueueingConsumer(resultsChannel);
            resultsChannel.basicConsume(resultsQueue, false, resultsConsumer);

            int messagesToCache = db.getJobs(JobState.RUNNING).size();
            Map<String, Status> cache = new TreeMap<>();

            int loop = 0;
            do {
                loop++;
                QueueingConsumer.Delivery delivery = resultsConsumer
                        .nextDelivery(Base.FIVE_SECOND_IN_MILLISECONDS);
                if (delivery == null) {
                    continue;
                }
                String messageFromQueue = new String(delivery.getBody(), StandardCharsets.UTF_8);
                // now parse it as JSONObj
                Status status = new Status().fromJSON(messageFromQueue);
                cache.put(status.getIpAddress(), status);
            } while (loop < LOOP_LIMIT && cache.size() < messagesToCache);

            return cache;

        } catch (IOException | ShutdownSignalException | InterruptedException | TimeoutException
                | ConsumerCancelledException ex) {
            throw new RuntimeException(ex);
        } finally {
            try {
                if (resultsQueue != null && resultsChannel != null) {
                    resultsChannel.queueDelete(resultsQueue);
                }
                if (resultsChannel != null) {

                    resultsChannel.close();
                    resultsChannel.getConnection().close();
                }
            } catch (IOException | TimeoutException ex) {
                System.err.println("Could not close channel");
            }
        }
    }
}