我们需要快速处理数据库队列(即具有要轮询的记录的表)。这是遗留的部分-我们无法用邮件队列替换此表。因此,我们必须对其进行轮询。
问题是如何以最有效的方式处理它?额外的复杂性是,我们需要动态地打开/关闭具有特定类型的记录的专用处理(例如,应独立处理特定列类型的记录,而不应与其他记录混合)
我目前的想法是:
- 创建一个作业,该作业将定期轮询批记录(例如,每30秒10000次),并将这些记录推送到消息队列(Kafka,ActiveMq)。
- 拥有一组消费实例,每个消费实例上都有消费者线程池,以同时处理队列中的项目(例如竞争消费者模式)。
- 关于专用处理要求-我正在考虑使用Zookeeper进行手表的动态协调-即具有一个znode,其中包含应独立处理的记录类型列表。更改后-轮询作业将得到通知,并开始将特定记录推送到单独的队列中。使用者实例将必须添加新的独立使用者线程池以使用此新队列中的项目。对于消耗部分,我相信Apache Camel可以轻松地创建,启动和停止路由,因此可以大大简化内容。
但是对我来说,所有这些看起来都很复杂。我想知道是否有人可以提出更优雅的解决方案。
预先感谢