const make = Effect.gen(function* () {
const redisService = yield* RedisService;
const createQueue = <DataType = any, ResultType = any, NameType extends string = string>(
name: QueueName,
opts?: QueueOptions
) =>
Effect.acquireRelease(
Effect.try({
try: () =>
new Queue<DataType, ResultType, NameType>(name, {
connection: redisService.redis,
...opts
}),
catch: (error) =>
...
}),
(queue) => Effect.sync(() => queue.close())
);
return { createQueue };
});
export class BullMqQueueService ... {
static readonly Live = Layer.effect(this, make).pipe(Layer.provide(RedisService.Live));
}
const make = Effect.gen(function* () {
const redisService = yield* RedisService;
const createQueue = <DataType = any, ResultType = any, NameType extends string = string>(
name: QueueName,
opts?: QueueOptions
) =>
Effect.acquireRelease(
Effect.try({
try: () =>
new Queue<DataType, ResultType, NameType>(name, {
connection: redisService.redis,
...opts
}),
catch: (error) =>
...
}),
(queue) => Effect.sync(() => queue.close())
);
return { createQueue };
});
export class BullMqQueueService ... {
static readonly Live = Layer.effect(this, make).pipe(Layer.provide(RedisService.Live));
}