簡體   English   中英

使用dropwizard輪詢SQS

[英]Polling SQS using dropwizard

我想要實現的目標:

我想制作一個投票亞馬遜SQS的dropwizard客戶端。 只要在隊列中找到消息,就會對其進行處理和存儲。

有關已處理消息的一些信息將通過API提供。

我為什么選擇Dropwizard:

看起來像是制作REST客戶端的好選擇。 我需要有指標,數據庫連接並與一些Java服務集成。

我需要幫助的是:

目前尚不清楚SQS輪詢在典型的dropwizard應用程序中的適用方式和位置。
它應該是一個托管資源嗎? 還是一個控制台記者控制台 - 記者 或者是其他東西。

您可以使用com.google.common.util.concurrent.AbstractScheduledService創建使用者線程,並將其作為ManagedTask添加到dropwizard的環境生命周期中。 以下是偽代碼 -

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);

作為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();
    }
}

在Application類的run()中,您可以按如下方式注冊上述類。

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

您可以使用scheduleWithFixedDelay()scheduleAtFixedRate(),具體取決於您的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM