Код: Выделить всё
ConsumerA.groovy (queue: consumer.aКод: Выделить всё
void handleMessage(List mongoIds) {
for (MongoId mongoId : mongoIds) {
MongoRecord mongoRecord = mongoRepository.findById(mongoId)
mongoRecord.propertyA = client.callExternalService()
mongoRepository.save(mongoRecord)
}
}
Код: Выделить всё
ConsumerB.groovy (queue: consumer.bКод: Выделить всё
void handleMessage(List mongoIds) {
for (MongoId mongoId : mongoIds) {
MongoRecord mongoRecord = mongoRepository.findById(mongoId)
mongoRecord.propertyB = client.callExternalService()
mongoRepository.save(mongoRecord)
}
}
Третий потребитель запрашивает эту коллекцию Mongo и использует значения из mongoRecord.propertyA и mongoRecord.propertyB для вычисления свойстваC:
Код: Выделить всё
ConsumerC.groovy (queue:consumer.cКод: Выделить всё
void handleMessage(List mongoIds) {
for (MongoId mongoId : mongoIds) {
MongoRecord mongoRecord = mongoRepository.findById(mongoId)
mongoRecord.propertyC = client.callExternalService(mongoRecord.propertyA, mongoRecord.propertyB)
mongoRepository.save(mongoRecord)
}
}
Раньше это была простая цепочка; Consumer.a обработает сообщение и свяжет его с Consumer.b через ConvertAndSend('consumer.c', mongoIds) (или аналогичный), но было обнаружено дополнительное бизнес-требование, которое требуется, чтобы два потребителя обработали перед третьим, и я действительно не знаю, как с этим справиться.
Подробнее здесь: https://stackoverflow.com/questions/793 ... her-queues
Мобильная версия