Demo

@Bean

@Service class ပေါ်ရှိ method ကို DI container အတွင်း singleton ဖန်တီးပေးသော factory အဖြစ် သတ်မှတ်ပါသည်။ @Service မတပ်ထားသော BullMQ Queue၊ Redis client၊ SDK client ကဲ့သို့ ပြင်ပ library instance များကို မှတ်ပုံတင်ရန် အသုံးပြုရပါသည်။

ဘာလုပ်ဆောင်ပါသနည်း

  • @Service class ၏ private သို့မဟုတ် public method ပေါ်တွင် decorator တပ်ရပါသည်
  • ထို method မှ ပြန်ပေးသော တန်ဖိုးကို plugin DI container ထဲတွင် singleton အဖြစ် မှတ်ပုံတင်ပါသည်
  • အခြား service သို့မဟုတ် controller များက type သို့မဟုတ် ပြန်ပေးသော class အလိုက် @Inject ဖြင့် ယူသုံးနိုင်ပါသည်
  • ကိုယ်ပိုင်မဟုတ်သော library (BullMQ၊ ioredis၊ AWS SDK စသည်) များကို ထုပ်ပိုးရန် အသင့်တော်ဆုံးဖြစ်ပါသည်

စည်းကမ်းများ

  • Host class သည် @Service() ဖြစ်ရမည်ဖြစ်ပြီး၊ module providers တွင် စာရင်းသွင်းထားရပါသည်
  • Factory သည် DI တပ်ဆင်ချိန်တွင် အလုပ်လုပ်ပါသည် — client သို့မဟုတ် queue ဖန်တီးရုံသာ ထားရှိပြီး၊ ကြီးမားသော အလုပ်ကို နောက်သို့ ရွှေ့ထားရပါသည်
  • @Bean method တစ်ခုလျှင် တိကျသော instance တစ်ခုသာ ပြန်ပေးရပါသည်
  • Constructor injection ကို မည်သည့်နေရာတွင်မျှ မထောက်ပံ့ပါ — အသုံးပြုသူများက property @Inject ဖြင့်သာ ယူရပါသည်

BullMQ Queue နမူနာ

အသုံးများသော ပုံစံမှာ ကိုယ်ပိုင် နောက်ခံအလုပ်များအတွက် Queue ကို ထုတ်ပေးခြင်းဖြစ်ပါသည်။ ပုံမှန်အချိန်ဇယားများအတွက်မူ CronJobService ကို ဦးစားပေးရပါသည်။

TSXfactory
1import { Queue } from "bullmq"; 2import { Bean, Service } from "@quan-erp/shared-backend-core"; 3 4@Service() 5export class QueueRegistryService { 6 @Bean() 7 private registerQueue() { 8 return new Queue("my-queue", { connection: redisOptions }); 9 } 10}
TSXinject consumer
1import { Queue } from "bullmq"; 2import { Inject, Service } from "@quan-erp/shared-backend-core"; 3 4@Service() 5export class JobPublisherService { 6 @Inject(Queue) // or the concrete token your factory returns 7 private queue: Queue; 8 9 async enqueue(payload: unknown) { 10 await this.queue.add("task", payload); 11 } 12}

မည်သည့်အခါ အသုံးပြုရမည်

  • သုံးသင့်ပါသည် — မျှဝေသုံးမည့် Queue / Worker / Redis / HTTP SDK client များ
  • သုံးသင့်ပါသည် — ဖန်တီးချိန်တွင် env သို့မဟုတ် config လိုအပ်သော adapter များ
  • မသုံးသင့်ပါ — ပုံမှန် plugin service များ (@Service နှင့် @Inject ကို အသုံးပြုပါ)
  • မသုံးသင့်ပါ — cron အချိန်ဇယားများ (CronJobService ကို အသုံးပြုပါ — Cron job စာမျက်နှာကို ကြည့်ပါ)

လိုက်နာသင့်သော အလေ့အထများ

  • Factory method များကို သေးငယ်စေပြီး registerX / createX ကဲ့သို့ ရှင်းလင်းစွာ အမည်ပေးရပါသည်
  • ချိတ်ဆက်မှုဆိုင်ရာ option များကို PluginEnv သို့မဟုတ် base env မှသာ ဖတ်ရပါသည် — secret ကို ကုဒ်ထဲတွင် တိုက်ရိုက် မရေးရပါ
  • Library က ရှင်းလင်းမှု လိုအပ်ပါက uninstall ချိန်တွင် @OnUninstall အတွင်း disconnect လုပ်ရပါသည်
  • Factory အမှန်တကယ် အလုပ်လုပ်စေရန် host @Service ကို @Module({ providers }) တွင် စာရင်းသွင်းရပါသည်