Skip to content

ضبط پیام

هم tail زنده و هم نمایهٔ پیام‌ها به پرسشی ضعیف‌تر از آنچه به‌نظر می‌رسد پاسخ می‌دهند. هر دو نظرسنجی (poll) می‌کنند: هر چند ثانیه صف را مرور می‌کنند و آنچه را در همان لحظه روی صف نشسته ثبت می‌کنند. صفی که سریع‌تر از فاصلهٔ نظرسنجی خالی می‌شود دیده نمی‌شود — و بیشتر صف‌های سالم، بیشتر اوقات، همین‌طورند.

ضبط این شکاف را می‌بندد. انتخابی است، برای هر صف جداگانه، و مسیریابی بروکرهای شما را تغییر می‌دهد؛ پس این صفحه دقیقاً می‌گوید چه می‌سازد و دقیقاً چطور برداشته می‌شود.

چیست

یک divert غیرانحصاری هر پیامی را که یک address مسیریابی می‌کند در صفی که Studio مالک آن است و آن را مصرف می‌کند کپی می‌کند. مصرف‌کننده‌های شما دست‌نخورده می‌مانند: divert غیرانحصاری کپی می‌کند، برنمی‌دارد. Studio فقط از نسخهٔ خودش مصرف می‌کند.

ORDER.IN ──divert غیرانحصاری──► artemis-studio.capture.<instance>.ORDER.IN.<subscription>
   (روی هر گره)                     ring-size N · address-full-policy=DROP
                                    expiry-delay · ناپایدار

                                    مصرف‌کنندهٔ Core

                          tail زنده · نمایهٔ پیام · ردیابی درخواست-پاسخ

روی هر گره زنده چه می‌سازد

شیءچرا
divert از address مبدأ، غیرانحصاریخودِ کپی. مسیریابی تولید تغییر نمی‌کند.
یک صف ناپایدار با سقف حلقه‌ایکپی‌ها را نگه می‌دارد. ring-size یعنی بروکر قدیمی‌ترین را دور می‌ریزد و بزرگ نمی‌شود.
address-setting روی artemis-studio.capture.#address-full-policy=DROP تا بروکر هرگز به‌حساب Studio مسدود یا صفحه‌بندی نشود، به‌علاوهٔ expiry-delay تا یک tail رهاشده از نظر زمانی هم کران‌دار باشد. مستندات خود Artemis دربارهٔ صفحه‌بندی روی address دارای صف حلقه‌ای هشدار می‌دهد؛ به همین دلیل این بخشی از tap است، نه یک افزودنی اختیاری.
security-setting روی artemis-studio.capture.#مصرف آن صف را به نقش بروکری خودِ Studio محدود می‌کند. صف ضبط یک نسخهٔ دوم کامل از بار تولیدی است؛ ساختنش بدون محافظت یعنی دادن یک شنود روی ترافیک شما به هر کلاینتی که بروکر احراز هویت می‌کند.

نقشی که اتصال Studio دارد پیکربندی است — artemis-studio.capture.broker-role، پیش‌فرض amq. Studio نمی‌تواند آن را کشف کند؛ بروکر هیچ خواندنی از نوع «من که هستم» ارائه نمی‌دهد.

خودبه‌خود از بین نمی‌رود

divertها، address settingها و security settingهایی که از راه API مدیریتی ساخته می‌شوند از راه‌اندازی مجدد بروکر جان سالم به‌در می‌برند. این روی Artemis 2.56.0 اندازه‌گیری شده، نه فرض — ADR-0065 را ببینید.

پس برداشتن همیشه یک کنش صریح است:

  • در Studio اشتراک را حذف کنید. divert، صف، address setting و security setting را از هر گره‌ای که روی آن نصب شده بودند برمی‌دارد.
  • اگر خودِ Studio از بین رفته باشد، حلقه و تأخیر انقضا هزینه را کران‌دار می‌کنند: صف حداکثر ring-size پیام نگه می‌دارد، هیچ‌کدام کهنه‌تر از تأخیر انقضا، روی صفی که در ژورنال نوشته نمی‌شود. هزینه‌ای ثابت و کران‌دار است — اما برداشتنش با شماست.

چه کاری را رد می‌کند

دو بررسی پیش از نصب، هر دو چون حالت جایگزین بی‌صدا شکست می‌خورد:

  • وجود یک divert انحصاری روی address مبدأ. Artemis divertهای انحصاری را پیش از بقیه اعمال می‌کند، پس یک divert ضبط پشت آن هرگز پیامی نمی‌بیند — تمیز نصب می‌شود و هیچ ثبت نمی‌کند، که از «صف ساکت است» قابل تشخیص نیست. ضبط رد می‌شود و آن divert و address‌ی که ترافیک واقعاً به آن می‌رود نام برده می‌شوند.
  • نبودِ اختیار برای محدودکردن صف ضبط. رد می‌شود، همراه با همان security-setting که آن را می‌داد.

یک نتیجهٔ ضبط‌شده چه ادعایی می‌کند

ضبط در دامنهٔ address است. یک divert در زمان مسیریابی address کپی می‌کند، پیش از پخش multicast؛ پس برای address‌ی با چند صف متصل، نمایه به‌ازای هر پیام مسیریابی‌شده یک ردیف دارد و واقعاً نمی‌تواند بگوید کدام اشتراک آن را گرفته است. کنسول این را روی هر نتیجه‌ای که مشمولش باشد اعلام می‌کند. anycast تحت تأثیر نیست — address و صف بر هم منطبق‌اند.

ضبط به‌ازای هر گره هم هست. یک tap شیئی محلیِ گره است، و یک گره پشتیبانِ ارتقایافته تا چرخهٔ بعدیِ همسان‌سازی Studio هیچ tap ندارد. آن شکاف ثبت می‌شود، نه میانگین‌گیری: اشتراک وضعیت را به‌ازای هر گره گزارش می‌کند و پرسشی که از گرهِ بدون ضبط می‌خواند همین را می‌گوید.

ردیف‌های ضبط‌شده با نام اصلی صف قابل جست‌وجو هستند — نگاشت از صف ضبط به address مبدأ حالتِ خودِ Studio است، نه یک هدر بروکر. _AMQ_ORIG_MESSAGE_ID شناسهٔ پیام مبدأ را روی آن اضافه می‌کند؛ جایی که بروکر آن را کپی نکرده باشد، «راستی‌آزمایی روی بروکر» غیرفعال ولی دیده‌شده، همراه با دلیلش، ارائه می‌شود — هرگز پنهان نمی‌شود.

چه چیزی آن را کران‌دار می‌کند

کرانپیش‌فرضوقتی به حد می‌رسد
ring-size۱۰٬۰۰۰بروکر قدیمی‌ترین را دور می‌ریزد. تعداد دورریخته تخمین زده و به‌ازای هر گره گزارش می‌شود.
expiry-delay۲۴ ساعتبروکر منقضی‌اش می‌کند. auto-create-expiry-resources خاموش است، پس چیزی انباشته نمی‌شود.
نرخ ورودی۵۰۰ در ثانیه برای هر اشتراکپیام‌های فراتر از نرخ دور ریخته و شمرده می‌شوند تا یک سیل، بقیه را گرسنه نگذارد.
اندازهٔ بدنه۲۵۶ کیبی‌بایت برای هر پیامبریده و نشانه‌گذاری ذخیره می‌شود، هرگز کامل به Postgres منتقل نمی‌شود.
نگه‌داری۷ روزپارتیشن‌ها انداخته می‌شوند.
اندازهٔ ذخیره‌شده۵ گیبی‌بایت برای هر اشتراکاشتراک تنزل می‌کند و همین را می‌گوید.

یک فیلتر ضبط اختیاری — یک عبارت فیلتر Artemis — هم آنچه بروکر کپی می‌کند و هم آنچه Studio ذخیره می‌کند را باریک‌تر می‌کند، بدون هزینه برای هیچ‌کدام.

دسترسی‌ها

روشن و خاموش‌کردن ضبط به capture:write نیاز دارد. عمداً settings:write نیست: ضبط مسیریابی بروکر را طبق زمان‌بندی تغییر می‌دهد و نسخهٔ دومی از بار تولیدی می‌سازد، که اختیاری متفاوت از تغییر فاصلهٔ نظرسنجی Studio است. هر نصب و برداشتن، پیش از فراخوانی بروکر ممیزی می‌شود و با نتیجه به‌روزرسانی می‌شود.

تصمیم‌ها

  • ADR-0062 — سازوکار
  • ADR-0065 — چرا برداشتن صریح است
  • ADR-0059 — نمایه‌ای که ضبط در آن می‌نویسد

Apache-2.0. Apache ActiveMQ and Apache ActiveMQ Artemis are trademarks of the Apache Software Foundation. Artemis Studio is an independent project, not produced by, endorsed by, or affiliated with the ASF.