我有一个由不同资源组成的REST API。其中一些资源也被索引并在ES中保持同步,我正在实现一个队列系统,以异步方式管理这些操作。我决定将Beanstalkd作为队列系统。
我的想法
对于每个资源,我将有一个不同的管,我将拆分 按资源索引工作。例如,我会有管 “index_users”,“index_posts”将接收作业 ES中索引的资源ID:
->useTube('index_users')->put( json_encode( [ 'ids' => [ 33, 35, 66 ] ] ) );
对于不同的资源有不同的管可以帮助我保持分离(例如我可以决定停止索引用户只是删除管index_users),工作将被更快地分析,因为每个队列的工作量将会减少并且数量巨大对一个资源的索引操作不会影响索引其他资源
我的问题
答案 0 :(得分:0)
这是一个很好的方法。我会为每条消息只放置一个id,而不是几个id。好像作业失败了,那么你只能重试那个。如果每封邮件只有一个ID,则可以更好地控制。
Beanstalkd很快,它可以很好地处理你的数字。您可以轻松使用多个管。它甚至更好,因为你可以根据消息的数量设置工人的数量,并从一个到另一个的速率。
如果您需要一个良好的Beanstalkd管理界面,您可以试用https://github.com/ptrofimov/beanstalk_console
另一方面,在ElasticSearch中查看批量操作,如果这是你需要的东西,那么你需要在管上放置多个ID才能对其进行批量索引。