Dasturlash

Elixir va Python o'rtasida Oban yordamida silliq ko'prik: Badge Forge misoli

3-aprel, 2026, 12:0014 ko'rish3 daqiqa o'qish
Elixir va Python o'rtasida Oban yordamida silliq ko'prik: Badge Forge misoli

Elixir dasturida Python ekotizimiga xos funksiyalar, masalan, mashina o'rganish modellarini yoki PDF yaratish kutubxonalarini ishlatish zarurati tug'ilganda, ko'p hollarda HTTP so'rovlar yoki alohida xabar navbati orqali muammolarni hal qilishga harakat qilamiz. Biroq, Oban – Elixir uchun kuchli ish navbati – bu jarayonni ancha soddalashtiradi va ikki til orasida to‘liq integratsiyani ta’minlaydi.

Oban nima va u qanday ishlaydi?

Oban PostgreSQL ma'lumotlar bazasidagi oban_jobs jadvaliga yozilgan JSON formatidagi ishlarni boshqaradi. Har bir platforma (Elixir yoki Python) o‘zining Oban kutubxonasi orqali bu jadvalni o‘qiydi, ishni bajaradi va holatini yangilaydi. Natijada, tilga bog‘liq bo‘lmagan, mustahkam va izchil ish oqimi yaratiladi.

Demo: Badge Forge

Misol sifatida “Badge Forge” loyihasini ko‘rib chiqamiz – bu kichik mikro‑ilova konferensiya badge’larini PDF formatida yaratadi. PDF yaratish uchun Python‑ning WeasyPrint kutubxonasi ishlatiladi, chunki u HTML/CSS ni bosma hujjatlarga o‘zgartirishda juda qulay.

Umumiy ma'lumotlar bazasini ulash

Ilovalar bir xil PostgreSQL ma'lumotlar bazasiga ulanadi. Bu “boshqaruvchi” rolini bajaruvchi Oban jadvali bo‘lib, har ikki tomon ham o‘z klaster liderligini mustaqil saqlaydi, shuning uchun bir-biriga to‘qnashmaydi.

Elixir tomoni: ishni qo‘shish

Elixir kodida enqueue_batch/1 funksiyasi bir necha badge yaratish ishlarini badges navbatiga qo‘shadi. Har bir ish quyidagi JSON argumentlarini o‘z ichiga oladi:

  • id – UUID
  • name – ishtirokchi ismi
  • company – kompaniya nomi
  • type – ro‘yxat (attendee, speaker, sponsor, organizer)

Worker nomi satr ko‘rinishida beriladi, masalan "badge_forge.generator.GenerateBadge", bu Python worker’iga mos keladi.

Python tomoni: PDF yaratish

Python kutubxonasi oban yordamida @worker dekoratori bilan GenerateBadge klassi yaratiladi. Ish bajarilganda:

  • Argumentlardan ma'lumot olinadi.
  • HTML shabloni render_badge_html funksiyasi orqali yaratiladi.
  • WeasyPrint HTML(string=html).write_pdf(path) yordamida PDF faylga yoziladi.
  • Yaratilgan PDF haqida ma'lumot printing navbatiga yangi ish sifatida qo‘shiladi.

Elixir tomoni: tasdiqlash va chop etish

Elixir’da BadgeForge.PrintCenter workeri printing navbatidan kelgan ishlarni qabul qiladi va real printerga yuborish yoki logga yozish orqali tasdiqlaydi.

Real‑vaqt monitoring

Oban Web Docker tasviri orqali barcha ishlarni veb‑interfeysda kuzatish mumkin. Docker konteynerini quyidagicha ishga tushiring:

docker run -d \
  -e DATABASE_URL="postgres://user:pass@host:5432/badge_forge_dev" \
  -p 4000:4000 \
  ghcr.io/oban-bg/oban-dash

Bu dasturni localhost:4000 manzilida ochib, navbatlar, muvaffaqiyatli va xatolikli ishlar statistikalarini ko‘rish mumkin.

Nima uchun Oban?

Oban bir nechta afzalliklarni taklif etadi:

  • PostgreSQL asosida, shuning uchun alohida xabar navbati kerak emas.
  • JSON argumentlari tilga bog‘liq bo‘lmagan formatda.
  • PubSub orqali real‑vaqt voqealar almashinuvi.
  • Har ikki platforma mustaqil klaster boshqaruvini saqlab, bir-biriga xalaqit bermaydi.

Natijada, Elixir‑ning yuqori samaradorligi va Python‑ning boy ekotizimi birgalikda ishlaydi, bu esa startaplar, ilm‑fan loyihalari yoki korporativ tizimlar uchun katta imkoniyatlar yaratadi.

Xulosa

Oban yordamida Elixir va Python orasida ishlarni almashish nafaqat texnik jihatdan sodda, balki keng ko‘lamli integratsiya senariylarini ham qo‘llab-quvvatlaydi. “Badge Forge” misoli ko‘rsatadiki, PDF yaratish, audio‑video tahriri yoki mashina o‘rganish modellarini chaqirish kabi vazifalarni bir platformadan ikkinchisiga uzatish bir necha qator kod bilan amalga oshiriladi.

Manba: Hacker News
#Elixir #Python #Oban #Job Queue #WeasyPrint
Telegram da muhokama qilish