我们正在编写邮件同步系统,我们使用RabbitMQ。每个生产者推送邮件ID,然后消费者获取ID并将邮件插入db。在我们有100个消费者(例如)并且生产者将生成ID太快的情况下,每个消费者将获得id并将使用api来获取邮件,因此将关于对api的并发请求的限制将是例外。
我们限制每个生产者的消费者(例如,如果最多3个消费者将获得一个生产者的ID,那么接下来的3个将从其他生产者那里获得,依此类推)?
答案 0 :(得分:0)
我们限制每个生产者的消费者(例如,如果最大3 消费者将获得一个生产者的ID,然后接下来的3个生产者 从其他人,等等)?
您可以使用简单路由来完成此操作。
ProducerA 发送路由密钥 routeA 和 consumer1 , consumer2 和 consumer3 订阅与路由密钥交换 routeA
ProducerB 发送路由密钥 routeB 和 consumer4 , consumer5 和 consumer6 订阅的邮件与路由密钥 routeB 交换。
.. 等等
您也可以使用topic exchange。
但是,在我看来,这可能不是限制API的并发请求的例外问题的解决方案。你没有指定哪个API,所以我可以假设这个数字是可配置的,你可以增加它,或者只是不允许并发访问(这很难想象,因为,你知道,不是70年代),其中并发症的整个想法崩溃了......