Example #1
0
  public static void main(String[] args) throws InterruptedException {

    String broker = args[0];
    String topic = args[1];
    String queue = args[2];

    Properties properties = new Properties();

    try {
      boolean validBroker = true;
      if (broker.equalsIgnoreCase("qpid")) {
        properties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("qpid.properties"));
      } else if (broker.equalsIgnoreCase("activemq")) {
        properties.load(
            ClassLoader.getSystemClassLoader().getResourceAsStream("activemq.properties"));
      } else if (broker.equalsIgnoreCase("mb")) {
        properties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("mb.properties"));
      } else {
        validBroker = false;
        log.error("Entered broker is invalid! ");
      }
      if (validBroker) {
        if (topic == null && queue == null) {
          log.error("Enter topic value or queue value! ");
        } else if (topic != null) {
          Context context = new InitialContext(properties);
          TopicConnectionFactory topicConnectionFactory =
              (TopicConnectionFactory) context.lookup("ConnectionFactory");
          TopicConsumer topicConsumer = new TopicConsumer(topicConnectionFactory, topic);
          Thread consumerThread = new Thread(topicConsumer);
          log.info("Starting" + broker + "consumerTopic thread...");
          consumerThread.start();
          Thread.sleep(5 * 60000);
          log.info("Shutting down " + broker + " consumerTopic...");
          topicConsumer.shutdown();
        } else {
          Context context = new InitialContext(properties);
          QueueConnectionFactory queueConnectionFactory =
              (QueueConnectionFactory) context.lookup("ConnectionFactory");
          QueueConsumer queueConsumer = new QueueConsumer(queueConnectionFactory, queue);
          Thread consumerThread = new Thread(queueConsumer);
          log.info("Starting" + broker + "consumerQueue thread...");
          consumerThread.start();
          Thread.sleep(5 * 60000);
          log.info("Shutting down " + broker + " consumerQueue...");
          queueConsumer.shutdown();
        }
      }
    } catch (IOException e) {
      log.error("Cannot read properties file from resources. " + e.getMessage(), e);
    } catch (NamingException e) {
      log.error("Invalid properties in the properties " + e.getMessage(), e);
    }
  }
  public <K> void publish(
      QueueConsumer<K> queueConsumer,
      Map<String, String> headers,
      Class<K> clazz,
      K pojo,
      long timeSinceEpoch)
      throws KafkaException {
    QueueItem inner = null;
    try {
      inner = QueueItem.build(mapper, headers, clazz, pojo);
    } catch (IOException e) {
      logger.error("Unable to map/ build queueItem", e);
      throw new KafkaException("Unable to map/ build queueItem", e);
    }

    QueueItem outer = new QueueItem();
    outer.setClassName(this.getClass().getCanonicalName());
    outer.setTryNumber(0);

    outer.setJsonObject(
        Json.createObjectBuilder()
            .add(QUEUE, queueConsumer.queue())
            .add(PAYLOAD, Json.createReader(new StringReader(inner.toString())).read())
            .build());

    logger.debug("queuing delayQ message: {}", outer);
    try {
      delayQ.put(outer.toString(), timeSinceEpoch);
    } catch (Exception e) {
      logger.error("Unable to set timer for delayQ", e);
      throw new KafkaException("Unable to set timer for delayQ", e);
    }
  }
  public <K> void publish(
      QueueConsumer<K> queueConsumer, Map<String, String> headers, Class<K> clazz, K pojo)
      throws KafkaException {
    QueueItem queueItem = null;
    try {
      queueItem = QueueItem.build(mapper, headers, clazz, pojo);
    } catch (IOException e) {
      logger.error("Unable to map/ build queueItem", e);
      throw new KafkaException("Unable to map/ build queueItem", e);
    }

    String queue = queueConsumer.queue();
    logger.debug("queue: {}, message: {}", queue, queueItem);
    kafkaClient.sendMessage(new KafkaMessage(queue, queueItem.toString()));
  }
 public QueueEntry findEarliestAssignedAvailableEntry(QueueConsumer<?> sub) {
   EntryFinder visitor = new EntryFinder(sub);
   sub.getQueue().visit(visitor);
   return visitor.getEntry();
 }