<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد جواد احمدی</title>
        <link>https://virgool.io/feed/@mohammadahmadii7799</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 06:33:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1550603/avatar/0lqNOa.jpeg?height=120&amp;width=120</url>
            <title>محمد جواد احمدی</title>
            <link>https://virgool.io/@mohammadahmadii7799</link>
        </image>

                    <item>
                <title>آشنایی با exchange ها در rabbitmq</title>
                <link>https://virgool.io/@mohammadahmadii7799/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-exchange-%D9%87%D8%A7-%D8%AF%D8%B1-rabbitmq-dzu1t4wygqwr</link>
                <description>اگر هنوز بخش اول یعنی آشنایی با ربیت رو مطالعه نکردید حتما سری به مقاله آشنایی با rabbitmq بزنید و با آمادگی برگردید تا باهم بریم جلو !قبلا گفتیم که ربیت دیتا هارو با استفاده از exchange ها تا صف مقصد مسیر یابی میکنه. ما چند نوع exchnage در ربیت داریم که با توجه به پیام ارسالی انتخاب میکنیم که از کدوم استفاده کنیم.فرق exchange ها با هم فقط در نحوه‌ی مسیربابی هستش.نوع اول   Direct : در همه پیام هایی که ارسال میکنیم یک routing key برای مسیریابی ارسال میشه و همینطور تمامی صف ها دارای یک binding key هستند. زمانی که ما از نوع direct برای ارسال پیام استفاده میکنیم باید دقیقا routing key موجود در پیام و binding key صف باهم یکی و برابر باشند.خوبه که بدونید این نوع از exchange ها یعنی نوع دایرکت به صورت پیشفرض استفاده میشه مگر اینکه شما نوع exchange را تغییر بدهید.دایرکت برای پیام های نوع unicast ( ارتباط یک به یک ) بهترین انتخاب هست.نوع دوم   Topic : در اینجا هم برای مسیریابی از routing key و binding key استفاده میشه فقط با این تفاوت که در نوع قبلی ما به این کلید ها به چشم یک string نگاه میکردیم و میگفتیم باید یکسان باشن ، اما اینجا به چشم یک الگو یا پترن در نظر میگیریم مثلا tv.seriestv.movies هر دو یک الگو هستند که کلمات با استفاده از . جدا میشن ، یا مثلا * به معنی وجود یک کلمه ( مثل regex بهش نگاه کنین ) و همینطور # به معنی هیچی!تو نوع تاپیک  پترن های کلید هامون رو باهم چک میکنه و اگه match بشن پیام رو به صف مورد نظر ارسال میکنه.برای پیام های نوع multicast ( پیام هایی که یک فرستنده و چند گیرنده دارند ) مناسبه.نوع سوم  Fanout : یک کپی از پیام رو برای همه‌ی صف ها ارسال میکنه. فرض کنید در یک مجموعه‌ی بزرگ مدیر هستید و میخواهید بخشنامه جدید رو برای همه‌ی واحد ها در تمامی شهر ها ارسال کنید. و یا در یک شرکت برنامه نویسی میخواهید یک دیتای مشابه رو برای چند گروه کدنویسی برای پردازش های مختلف ارسال کنید. در این صورت از این  exchnage استفاده میکنید.برای مسیریابی های broadcast ( ارتباط یک به همه ) مناسب هستش.نوع چهارم Headers : د شبیه نوع اول یعنی دایرکت هستش فقط با این تفاوت که میاد از attrs های موجود در در header پیام به جای routing key استفاده میکنه. در مورد چهار نوع اصلی exchang های ربیت صحبت کردیم. در آخر اضافه کنم ، تمامی exchange ها دو قابلیت وجود داره که در مورد پایداری صف ( صفی که exchange کانکت شده ) و وضعیت صف بعد از خالی شدن هستش. قابلیت اول : durable یا transient ؟ اگر بخواهیم صف بادوام باشه یعنی دیتا های موجود  در دیسک ذخیره بشه از قابلیت durable استفاده میکنیم. در این صورت اگر سرویس ربیت ما reset بشن اطلاعات از بین نمیرن.در مقابل اگر بخواهیم صف نا پایدار باشه و ذخیره داده ها روی حافظه انجام بشه ، از transient استفاده میکنیم که اگر سرویس reset بشه داده ها پاک میشن. دومین قابلیت : autodelete وقتی برای auto delete مقدار true قرار بدیم ، صفمون رو بعد از خالی شدن پاک میکنه و برای دفعه بعدی دوباره باید صف رو تعریف کنیم، در غیر این صورت باید مقدار false براش تعریف کنیم. گرد آورنده : محمد جواد احمدی استاد : دکتر مریم حاجی اسمعیلی ، دکترای علوم کامپیوتر از دانشگاه کینگستون لندنDr.Maryam HajiesmaeiliPhD of computer science from Kingston university of LondonLinkedin</description>
                <category>محمد جواد احمدی</category>
                <author>محمد جواد احمدی</author>
                <pubDate>Wed, 22 Jun 2022 00:35:51 +0430</pubDate>
            </item>
                    <item>
                <title>آشنایی با RabbitMQ - بخش اول</title>
                <link>https://virgool.io/CE-SHAHED-publication/virgoolio-svlgo3crjbou</link>
                <description>شده تو محل کار یا شرکتتون نیاز به جا به جا کردن دیتا داشته باشین؟اگه در حد چندتا عکس باشه از فلش یا هارد میتونیم استفاده کنیم. اما حرف در مورد دیتا با حجم بالاست که قطعا جا به جایی با استفاده از فلاپی سی دی فلش یا غیره ، ممکن نیست.ربیت (RabbitMq) یک massage broker software هستش. در اصل کار کنترل کردن کار ها و پیام ها بین سرور های مختلف و اپلیکیشن های مختلف را انجام میده. با استفاده از ربیت آپشن های مختلفی در اختیارمون قرار میگیره ، اولیش اینکه اون مشکلی که اول صحبتمون مطرح کردم با ربیت کاملا حل میشه. با ربیت می تونیم بین سیستم های مختلف پیام ارسال کنیم و عملیات صف بندی را انجام بدیم. همینطور میتونیم بین چند سیستم که از زبان مختلفی استفاده میکنن ، ارتباط برقرار کنیم.فرض کنید که قراره ما یک سری دیتا از دیتابیس sql بخونیم و بعد از اینکه یک سری عملیات روی دیتا انجام دادیم ، خروجی هارو در الستیک بریزیم. در نظر داشته باشید که دیتابیس sql ما روی سرور یک و دیتابیس الستیک روی سرور دو قرار داره. عملا جا به جا کردن با روش های دستی غیر ممکنه.باید از یک رابط بین سرور ها استفاده کنیم. رابط ما همون ربیت هستش. کارش به این صورت انجام میشه که ما بعد از اینکه خروجی های اولی برناممون رو گرفتیم ، روی یک صف در ربیت (که روی سرور یک هست) پوش میکنیم. و بعد از سمت سرور دوممون یک mapping انجام میدیم و دیتا هارو از روی ربیت برمیداریم.بیاید اصلا اول با یک سری از اصطلاحاتش آشنا بشیم تا بهتر درک بکنیم.مفهوم Producer : فرستنده پیاممفهوم Consumer: گیرنده پیاممفهوم Queue: بافر (حافظه موقت) یا همون صف برای ذخیره سازی پیام هامفهوم Message: دیتا و یا محتوای ارسال شده از طرف Producer به Consumerمفهوم Exchange: وظیفه مسیر یابی بین پیام و صف ها رو به عهده داره.مفهوم Binding: اتصال بین Queue (صف ) و Exchange (تعیین کننده مسیر)مفهوم Users: با استفاده از یوزرنیم و پسوورد میتونه به ربیت وصل بشه و همینطور هم میشه دسترسی یوزر هارو محدود کرد.روش عملکرد : فرستنده ، یک پیام روی ربیت پوش (ارسال) میکنه. پیام وارد exchange میشه تا صف مورد نظرش پیدا بشه. بعد از اون exchange  پیام رو به صف مورد نظر ارسال میکنه.حالا پیام تو صف قرار گرفته (FIFO) ، یعنی به ترتیبی که وارد صف شدن توسط گیرنده از صف خارج میشن.این عکس دقیقا نحوه عملکرد یک سری دیگه از آپشن های ربیت ، قابلیت تقسیم وظایف بین سرور هاست. فرض کنید ما هزار صفحه پی دی اف داریم و میخوایم صفحه ها تک به تک تبدیل به عکس بشن. اگر این کار روی یک سرور انجام بشه یا اگه صورت ناگهانی مشکلی برای سرور پیش بیاد. کار ماهم نیمه کاره میمونه و نیازه که دوباره این کار انجام بشه. مشکل دومش هم اینه که وقتی حجم کار میره بالا یک سرور کاملا درگیر میشه و ما تا زمانی که کار تموم نشه نمیتونیم از اون سرور استفاده دیگه ای بکنیم. برای اینکه از این مشکلها جلوگیری بشه از ربیت استفاده میکنن ، ربیت میاد این کار رو بین چند سروری که داریم تقسیم میکنه ، باعث میشه سرعت کار بالا تر بره و هیچکدوم از سرور های ما کامل اشغال نشن. علاوه بر این اگر یکی از سرور ها از کار بیوفته ، کار اون سرور بین بقیه سرور ها تقسیم میشه و کار ادامه پیدا میکنه.گاهی وقتها نیازه وقتی یک کار در حال انجام شدن هستش گزارش کار همزمان برای چند واحد ارسال بشه، اینجا باز هم از ربیت استفاده میکنیم و یک پیام رو برای چندتا از صف ها ارسال میکنیم.به صورت کلی ، ربیت یک رابط بین اپلیکیشن ها و سرور هاست که سرعت کار رو بالا میبره و از یک سری مشکلات احتمالی جلوگیری میکنه. گرد آورنده مقاله : محمد جواد احمدیاستاد : دکتر مریم حاجی اسمعیلی ، دکترای علوم کامپیوتر از دانشگاه کینگستون لندنDr.Maryam HajiesmaeiliPhD of computer science from Kingston university of LondonLinkedin</description>
                <category>محمد جواد احمدی</category>
                <author>محمد جواد احمدی</author>
                <pubDate>Sun, 13 Mar 2022 17:03:11 +0330</pubDate>
            </item>
            </channel>
</rss>