مجید
3 سال پیش توسط مجید مطرح شد
5 پاسخ

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

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

مثلا

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


ثبت پرسش جدید
متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش مطرح شد
0

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


مجید
تخصص : برنامه نویس php , laravel,java...
@MAJIDKALI 3 سال پیش مطرح شد
0

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


متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش آپدیت شد
0

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

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

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


مجید
تخصص : برنامه نویس php , laravel,java...
@MAJIDKALI 3 سال پیش مطرح شد
0

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

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

روش اول

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

روش دوم

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

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

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

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


متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش مطرح شد
1

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

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


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

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