[英]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.