我正在设计一个与REST API(组件B)集成的通知应用程序的组件(组件A),它可以接受最多10,000个并发请求。发送的数据小于1KB,将存储在NoSQL DB中,NoSQL DB将由组件A读取,然后尽可能并发地发送到组件B.我想同时从组件A向组件B发送10,000个请求。我打算在组件A和组件B之间放置rabbitmq或activemq以控制线程计数并缩放并发处理以便发送大量的并发请求(10,000)。
组件A:
-read all documents (less than 1kb each) from NoSQL database
-create JMS message and push data to rabbitmq or activemq
-the 10,000 rabbitmq or activemq listener/consumer threads will concurrently consume,
transform NoSQL object graph to the request needed by component B and call component B
and repeat until all messages are sent to component B
组件B:
-can't handle more than 10,000 concurrent requests
-wont support a bulk API
数据集可能需要处理数百万条消息,并且需要尽可能快地从组件A发送到组件B.我正在考虑将消息一起批处理。
任何关于缩放这一点的设计理念都将非常感激
答案 0 :(得分:1)
听起来你已经走上了正确的道路
RabbitMQ每分钟可处理100,000多条消息,因此使用组件B处理10K并发请求时不会出现任何问题
作为消息使用者,您可以使用consumer prefetch设置告诉RabbitMQ一次可以处理多少消息。
为从RabbitMQ读取的代码设置预取为10,000(或更少),转换对象图并发布到REST api。有了它,你应该很高兴。