rabbitmq انواع exchange پایتون
04 Tir 1402
0 نظر
51 : 3
rabbitmq انواع exchange

rabbitmq  چهار نوع exchange داره که با کمک  Routing Key ها و Header Attribute ها نوع مورد نظر رو ایجاد کنیم.

 

در rabbitmq  پیام ها مستقیم به سمت Queue (صف) ها نمیره! پیام در ابتدا به exchange میره که کارش مدیریت جایگیری پیام در صف مورد نظره اینصورت که با استفاده از Routing key و Header Attribute که از طرف Producer (ارجاع دهنده یا همون ارسال کننده) دریافت می کنه تصمیم میگیره که پیام در چه صفی قرار بگیره. 

 

نکته جالب مسئله اینجاست که فقط با الگوی string که در Routing Key مینویسیم سه نوع از چهار نوع exchange  ایجاد میشه و مورد چهارم هم با کمک Header Attribute که به شکل کلید مقدار پر میشه ایجاد میشه.

 

Routing key و Header Attribute در واقع یک آدرس هست که در زمان bind (ارجاع دادن)  درخواست به صف، به binder (ارجاع دهنده) میگه که درخواست در کدوم صف یا صف ها قرار بگیره.

 

Exchange Direct

برای ساخت این نوع کافیه زمان ایجاد Exchange یک رشته بدون استفاده از کارکتر ( . ) نقطه یا ستاره (*) به Routing Key اختصاص بدید ( این رشته میتونه هرچیزی باشه  نام یک رنگ ، نام حیوان خونگیتون یا هرچیز دیگه ای)   .

channel.basic_publish(routing_key='blue')

در این نوع Exchange درخواست رو در صف مورد نظر قرار میده.

 

Exchange Fanout

برای ساخت این نوع کافیه زمان ایجاد Routing Key رو خالی رها کنید.

channel.basic_publish(routing_key='')

در این نوع Exchange درخواست رو در تمامی صف ها قرار میده.

 

Exchange Direct

برای ساخت این نوع  Routing Key رو با الگویی از رشته پر میکنیم  (برای اینکه الگوی مورد نظر رو پیاده سازی کنیم باید از دو کارکتر نقطه ( . ) و ستاره ( *  ) استفاده کنیم.

چند مثال از این الگو ها عبارتند از

  • 'blue.red.*'
  • '*.red.green'
  • 'pink.red.green'
  • 'pink.*.green'

channel.basic_publish(routing_key='pink.red.green')

در این نوع Exchange درخواست رو بر اساس الگو در  صف ها قرار میده.

 

 

Exchange Headers

برای ساخت این نوع باید با Attribute properties و به شکل زیر هدر مورد نظرمون رو ایجاد کنیم.

properties=pika.BasicProperties( headers={'key': 'value'} # Add a key/value header )

چند مثال از این headers ها عبارتند از

headers={"x-match": "any", "type": "char", "model": "sdk"}
headers={"x-match": "all", "type": "original", "color": "red"}

در headers یک  هدر ویژه با کلید  x-match  وجو داره که دو مقدار any یا all رو میگیره ( مقدار پیش فرض all) هست این هدر ویژه تعیین میکنه که بر چه اسای سایر هدر ها باید منطق بشن . وقتی مقدار all باشه یعنی همه کلید مقدار های باید منطبق باشن ولی اگر any باشه یعنی کافیه یکی از هدر ها منطبق باشه تا درخواست به اون صف bind (ارجاع) داده بشه.

در این نوع Exchange درخواست رو بر اساس x-match و الگویی که بصورت Key و Value در headers نوشتید در صف قرار میده.

 

چند قدم در چند راه

ابتدا وارد شوید یا ثبت نام کنید!

برای ثبت نظر، نقد ابتدا باید وارد شوید یا ثبت نام کنید.
سبد خرید