#mikro-orm #bullmq
#mikro-orm #bullmq
Вопрос:
Я использую MikroORM с рабочими BullMQ. Когда MikroORM используется с приложениями Express, ему требуется RequestContext, чтобы поддерживать уникальные идентификационные карты для каждого запроса. Я подозреваю, что то же самое требуется при обработке нескольких заданий одним и тем же работником BullMQ.
Кто-нибудь еще успешно объединил эти две библиотеки? Возможно ли автоматически разветвлять диспетчер сущностей, когда работник начинает новое задание?
Ответ №1:
@UseRequestContext()
Для таких случаев вы можете использовать декоратор. В основном это будет действовать так, как если бы метод выполнялся после промежуточного программного обеспечения, которое добавляет контекст. Обратите внимание, что для его использования this.orm
должен быть MikroORM
экземпляр.
@Injectable()
export class MyService {
constructor(private readonly orm: MikroORM) { }
@UseRequestContext()
async doSomething() {
// this will be executed in a separate context
}
}
https://mikro-orm.io/docs/usage-with-nestjs/#request-scoped-handlers-in-queues
(эта часть документации посвящена nestjs, но это та же проблема с тем же решением)
В качестве альтернативы вы могли бы использовать RequestContext.createAsync()
явно:
await RequestContext.createAsync(orm.em, async () => {
// orm.em here will use the contextual fork created just for this handler
});