我有一个 EJB,它使用 @Schedule 注释以类似 cron 的方式执行一些企业逻辑。
我正在使用 JBoss 7.1 final。
问题是此方法正在使用来自 AWS SQS 服务的消息,在该 API 中,一次最多只能获取 10 条消息。这会导致大量消息被添加到 SQS,但消费速度不够快。所以我想问的是,是否有一种方法可以创建一个池并让 2 或 3 个 EJB 同时处理来自 SQS 的消息。
我有一个 EJB,它使用 @Schedule 注释以类似 cron 的方式执行一些企业逻辑。
我正在使用 JBoss 7.1 final。
问题是此方法正在使用来自 AWS SQS 服务的消息,在该 API 中,一次最多只能获取 10 条消息。这会导致大量消息被添加到 SQS,但消费速度不够快。所以我想问的是,是否有一种方法可以创建一个池并让 2 或 3 个 EJB 同时处理来自 SQS 的消息。
我已经添加了一些澄清的评论,但无论如何这里有一个可能适用于您的案例的想法。
使用预定的 EJB顺序地使用来自 SQS 队列的消息。由于您可以获取的消息数量显然受到限制,因此您可能需要多次调用 SQS 服务。现在不要处理消息,只需将它们发送到“中间”JMS 队列中。
使用常规消息驱动 bean (MDB) 来处理“中间”JMS 队列中的消息。您可以指定池大小等并让应用程序。服务器管理负载。JMS 消息的处理将是并发的。
这将符合 EJB 规范,并且相对干净。不过,技术复杂性略有增加。此外,它假设最初的问题是顺序处理SQS 消息是根本问题,而不仅仅是读取SQS 消息。