راکت

قرار دادن صف برای درخواست های یک سرویس api

5 پاسخ

سلام دوستان وقت بخیر
چند تا سرویس دارم که با api هست و می خواهم به کاربر ها ارائه بدم و بعد از دریافت اطلاعات از موجودی کاربر در سیستم کم بشه اما مشکل اینجاست که اگر در یک زمان چند درخواست به سیستم ارسال بشه فیلد دریافتی یک مبلغ می گیرن و بعد از کم کردن از اون در جدول ذخیره می کنن

مثلا

اگر موجودی کاربر 100 تومن باشه و هزینه سرویس 10 تومن باشه و دو تا درخواست هم زمان ارسال بشه هر دو از مبلغ 100 تومن تراکنش رو کم می کنن یعنی هر دو 90 تومن رو ذخیره می کنن راه حلی هست که درخواست ها به سرویس توسط یک صف انجام شود

مجید
مجید
@MAJIDKALI
ثبت پرسش جدید

پاسخ‌ها

5
متین طیبی نیا
متین طیبی نیا
@MatinTayebi

تخصص: backend

سلام
نمیدینم این روش کار میکنه یانه
همانطور که ما برای اینکه مطمعن بشیم تمام ایمیل های ما به مقصدشون ارسال بشه اون هارو داخل یک notification مینوشتیم و اینترفیس shouldQueue تو notification ایپلیمنت میکردیم حالا ما به جای ایمیل یک سری دیتا داریم که قراره به یک سری api فرستاده بشن ؛ فکر کنم بشه کدی به غیر از ارسال ایمیل تو notification بنویسیم .
فقط کافی هستش دیتا مد نظر از کاربر بگیریم و به notification ارسال کنیم و چون ایترفیس shouldQueue تو notification ایمپلیمتن کردیم
خود لاراول اونو تو صف قرار میده

مجید
مجید
@MAJIDKALI

تخصص: برنامه نویس php , laravel,javascript

فکر کنم کار کنه اما بهتریس روش چیه

شاید پاسخ شما همین‌جا باشد

متین طیبی نیا
متین طیبی نیا
@MatinTayebi

تخصص: backend

اگه منظورتون از نظر درخواست ها هستش .خب بستگی به درخواست های شما داره اگه فکر میکنید queue database مناسب این کار نیست میتونید از سرویس هایی شبیه به rabbitmq استفاده کنید

آموزش سرویس rabbitmq با لاراول

بازم مستندات لاراول بخونید شاید روش بهتری برای پیاده سازی باشه
مستندات لاراول

مجید
مجید
@MAJIDKALI

تخصص: برنامه نویس php , laravel,javascript

خیلی ممنون از راهنماییتون @MatinTayebi

من به سه تا جواب رسیدم

روش اول

Deadlocks در دیتابیس https://laravel.com/docs/8.x/queries#pessimistic-locking

روش دوم

استفاده $user->decrement('wallet',$price)

روش سوم استفاده از mutex لاک

با https://github.com/phlib/mutex

خوب حالا اگر تجربه کار کردن با اینا رو دارید لطفا راهنمایی کنید و اگر نظر بهتری از اینا دارید بنویسد
خیلی ممنون از جوابا ها

متین طیبی نیا
متین طیبی نیا
@MatinTayebi

تخصص: backend

سلام
الان دارم به پاسخ شما نگاه میکنم فهمیدم من اصلا کمک زیادی نکردم .
شما یک چیز دیگه میخواستید من یک چیز دیگه میگفتم 😅

و حالا در مورد رورش هایی که گفتید من حقیقتش با پکیج mutex کار نکردم که نظر بدم اما در مورد روش های قبلی ، خوبیش اینجاست که کالکشنی از مدل user به ما برمیگردونه که اگه خواستیم بلای دیگه ای سر دیتا مون بیاریم دستمون باز باشه.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام