Опрос SQS с помощью dropwizard - PullRequest
       6

Опрос SQS с помощью dropwizard

0 голосов
/ 30 августа 2018

Чего я пытаюсь достичь:

Я хочу создать клиент dropwizard, который опрашивает Amazon SQS. Всякий раз, когда сообщение находится в очереди, оно обрабатывается и сохраняется.

Некоторая информация об обработанных сообщениях будет доступна через API.

Почему я выбрал Dropwizard:

Выглядело как хороший выбор, чтобы сделать REST-клиент. Мне нужны метрики, соединения с БД и интеграция с некоторыми службами Java.

В чем мне нужна помощь:

Не очень понятно, как и где опрос SQS поместится в типичном приложении dropwizard.
Это должен быть управляемый ресурс? Или консольный репортер консольный репортер ? Или что-то еще.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

В качестве альтернативы ответа RishikeshDhokare , можно также перейти к следующему коду, который не требует включения дополнительного jar в качестве зависимости в ваш проект, чтобы сделать uber jar как можно более легким.

public class SQSPoller implements Managed, Runnable {

    private ScheduledExecutorService mainRunner;

    @Override
    public void start() throws Exception {
        mainRunner = Executors.newSingleThreadScheduledExecutor()
        mainRunner.scheduleWithFixedDelay(this, 0, 100, TimeUnit.MILLISECONDS);
    }

    @Override
    public void run() {
        // poll SQS here
    }

    @Override
    public void stop() throws Exception {
        mainRunner.shutdown();
    }
}

И в run () вашего класса Application вы можете зарегистрировать вышеуказанный класс следующим образом.

environment.lifecycle().manage(new SQSPoller());

Вы можете использовать scheduleWithFixedDelay () или scheduleAtFixedRate () в зависимости от вашего варианта использования.

0 голосов
/ 30 августа 2018

Вы можете использовать com.google.common.util.concurrent.AbstractScheduledService, чтобы создать потребительский поток и добавить его в жизненный цикл среды dropwizard как ManagedTask. Ниже приводится псевдокод -

public class YourSQSConsumer extends AbstractScheduledService {
  @Override
  protected void startUp() {
    // may be print something
  }

  @Override
  protected void shutDown() {
    // may be print something
  }

  @Override
  protected void runOneIteration() {
    // code to poll on SQS 
  }

  @Override
  protected Scheduler scheduler() {
     return newFixedRateSchedule(5, 1, SECONDS);
  }
}

В Main сделать это -

YourSQSConsumer consumer = new YourSQSConsumer();
Managed managedTask = new ManagedTask(consumer);
environment.lifecycle().manage(managedTask);
...