1 دقیقه میانگین مدت زمان مطالعه است

یکی از کتابخانه هایی که برای انتقال پیام بین سیستم های مختلف وجود دارد، Rabbitmq هست.
یکی از قابلیت های مفید این Message Broker قابلیت Clustering هست که در زمان هایی که یکی از سرورهای شما دچار مشکل می‌شود، می‌تواند این بصورت خودکار پیام ها را به یک سرور دیگر ارسال کند.

برای اینکه در سمت فرستنده پیام، چند Host را برای ارسال پیام معرفی کنید، می‌توانید بصورت زیر عمل کنید:

var factory = new ConnectionFactory
{
    //HostName = hostNames.First(),
    UserName = username,
    Password = password,
    Port = port,
    AutomaticRecoveryEnabled = automaticRecoveryEnabled
};

var endpoints = hostNames
    .Select(item => new AmqpTcpEndpoint(new Uri(item)))
    .ToList();

var connection = factory.CreateConnection(endpoints);

_channel = connection.CreateModel();

_properties = _channel.CreateBasicProperties();

تفاوت کد بالا با حالتی که فقط یک هاست دارید، در خط کامنت شده و endpoints می‌باشد.
در حالتی که فقط یک هاست دارید می‌توانید آن را در قسمت کامنت شده معرفی کنید، اما در زمان‌هایی که تعداد آنها بیشتر است باید آنها را در CreateConnection معرفی کنید.
این کلاس دارای Constructor های مختلفی است که یکی از آنها یک List دریافت می‌کند و یکی دیگر List. تفاوت آنها در عمل زمان های است که آدرس های شما دارای پورت نیز می‌باشند. اگر آدرس های شما دارای پورت نیز باشند، نمی‌توانید آنها را بصورت یک لیست از String پاس بدهید و حتما باید آنها را بصورت حالت دوم ایجاد کنید.

بطور مثال اگر هاست های شما بصورت زیر باشد:

private static List<string> Hosts = new()
{
    "192.168.99.100:30000",
    "192.168.99.100:30002",
    "192.168.99.100:30004"
};

در صورتی که همین لیست را به کلاس گفته شده پاس بدهید با خطا مواجه می‌شوید و حتما باید آن را بصورت AmqpTcpEndpoint دربیاورید.

البته اگر از آدرس‌ها بصورت uri استفاده می‌کنید، حتما http را قبل از آدرس ها قرار دهید.

private static List<string> Hosts = new()
{
    "http://192.168.99.100:30000",
    "https://192.168.99.100:30002"
};

همچنین برای بهبود عملکرد می‌توانید در کانفیگ مقدار AutomaticRecoveryEnabled را برابر True قرار بدهید.

اطلاعات بیشتر:

rabbitmq

قوانین آدرس ها در ربیت:
url

ارسال نظر