java - ScheduledThreadPoolExecutor - 经常运行的单个任务/线程或运行频率较低的多个线程

标签 java multithreading amazon-sqs threadpoolexecutor

我正在尝试设置一个作业,该作业将每 x 分钟/秒/毫秒/其他时间运行一次,并轮询 Amazon SQS 队列以获取要处理的消息。我的问题是最好的方法是什么。我是否应该创建一个具有 x 个线程的 ScheduledThreadPoolExecutor 并使用 ScheduleAtFixedRate 方法调度单个任务,然后经常运行它(例如 10 毫秒),以便在需要时使用多个线程,或者,正如我向同事建议的那样,创建一个具有 x 个线程的 ScheduledThreadPoolExecutor,然后以稍微偏移的间隔创建多个计划任务,但运行频率较低。对我来说,这听起来像是 STPE 的用途。

通常我使用 Spring/Quartz 来处理此类事情,但目前还没有这种情况。

那么你有什么想法呢?

最佳答案

我建议您使用long polling在 SQS 上,这使得您的 ReceiveMessage 调用的行为更像是对 BlockingQueue 上的 take 的调用(这意味着您不需要使用计划任务从队列中轮询 - 您只需要一个在无限循环中轮询的线程,如果连接超时则重试)

关于java - ScheduledThreadPoolExecutor - 经常运行的单个任务/线程或运行频率较低的多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816274/

相关文章:

java - <jsp :param>? 是否有限制\最大长度

amazon-web-services - 如何在AWS Lambda触发器云形成模板中提供多个SQS队列名称

c++ - 可以从 Windows DLL 中的全局变量创建/销毁 std::threads 吗?

python - Azure 中与 Aws SqS 最相似的队列服务是什么?

php - 使用作业队列上传到 AWS S3 存储桶

java - 多线程是队列契约的一部分吗?

java - 如果PDF文件已打开,如何关闭它?

java - Smack Android,创建接收消息的服务

c++ - 这个简单的 C++ 程序是多线程的吗?

Java, "bind"线程的东西