{"id":210428,"date":"2014-01-27T10:58:03","date_gmt":"2014-01-27T06:58:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=210428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=210428","title":{"rendered":"<span class=\"post_title\">MassTransit. \u0421\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0448\u0438\u043d\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 RabbitMQ (MSMQ) \u0434\u043b\u044f .Net<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/0ec\/946\/515\/0ec946515ef338c16f8beb61a680e40d.png\" alt=\"MassTransit\" align=\"left\"\/><br \/>  \u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u044f \u0443\u0441\u043b\u044b\u0448\u0430\u043b \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"http:\/\/masstransit-project.com\/\"> MassTransit<\/a> (MT) \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u044d\u043a\u0441-\u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u0437\u0430\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u0432 \u043d\u0430\u0448 \u043e\u0444\u0438\u0441 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043e\u043f\u044b\u0442\u043e\u043c. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 MT \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0434\u043b\u044f \u043d\u0430\u0441, \u0447\u0443\u0436\u043e\u0439 \u043e\u043f\u044b\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u041f\u043e\u043c\u0438\u043c\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 MT \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f \u043d\u0430\u043c \u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 MassTransit.<\/h4>\n<p>  MassTransit \u2014 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 <a href=\"http:\/\/c2.com\/cgi\/wiki?DataBusPattern\">DataBus<\/a>. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u2014 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e\u0449\u0438\u0445 \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043c\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 Dru Sellers \u0438 <a href=\"http:\/\/blog.phatboyg.com\/\"> Chris Patterson<\/a> \u043a\u0430\u043a \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"http:\/\/particular.net\/NServiceBus\">NServiceBus<\/a>, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 RabbitMQ \u0438\u043b\u0438 MSMQ \u043d\u0430 \u0432\u044b\u0431\u043e\u0440. \u0412 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c RabbitMQ, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438, \u043f\u043e\u0434\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0448\u0438\u043d\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e MassTransit \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c AMQP \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u044f \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 AMQP \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043e\u0431\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0448\u0438\u043d\u044b \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c. \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u2014 \u0437\u043d\u0430\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0432\u043f\u043e\u043b\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0440\u043e\u043a\u0430 <a href=\"http:\/\/www.rabbitmq.com\/getstarted.html\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>. \u0423\u0440\u043e\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 RabbitMQ \u043d\u0435 \u0437\u0430\u0439\u043c\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u044b. \u041a \u0441\u043b\u043e\u0432\u0443, \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0434\u0430\u0436\u0435 \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0430 \u0443\u0440\u043e\u043a\u043e\u0432. <a href=\"http:\/\/habrahabr.ru\/post\/149694\/\">\u0423\u0440\u043e\u043a \u043e\u0434\u0438\u043d<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/post\/150134\/\">\u0443\u0440\u043e\u043a \u0434\u0432\u0430<\/a>. <\/p>\n<h4>\u041a \u0434\u0435\u043b\u0443.<\/h4>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043e\u0442 \u0442\u0435\u043e\u0440\u0438\u0438 \u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 MassTransit \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u043a RabbitMQ. \u041c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 Publisher \u0438 Subscriber. Publisher, \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0432 \u0448\u0438\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u201cKeyWasPressed\u201d \u0438 \u043a\u043e\u0434 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. Subscriber \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u0448\u0438\u043d\u044b \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f<\/b><\/p>\n<div class=\"spoiler_text\">1) \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"http:\/\/www.erlang.org\/download.html\">Erlang<\/a><br \/>  2) \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"http:\/\/www.rabbitmq.com\/download.html\">RabbitMQ<\/a><br \/>  3) \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c MassTransit.RabbitMQ \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 PM&gt; Install-Package MassTransit.RabbitMQ.  <\/div>\n<\/div>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043a\u043e\u0434\u0443. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0432 \u0448\u0438\u043d\u0443, \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/DTO\"> DTO<\/a> \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0442 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0443. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e KeyWasPressed.   <\/p>\n<pre><code class=\"cs\">public class KeyWasPressed {    \/\/\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0443    public ConsoleKey PressedKey { get; set; } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f (publisher) \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 (subscriber). \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 ServiceBus. ServiceBus \u0432 MassTransit \u2014 \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 RabbitMQ (\u0438\u043b\u0438 MSMQ).<\/p>\n<h5>\u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a.<\/h5>\n<p>  <\/p>\n<pre><code class=\"cs\"> IServiceBus subscriber = ServiceBusFactory.New(sbc =&gt; {      \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c rabbitMq      sbc.UseRabbitMq();      \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c      sbc.ReceiveFrom(&quot;rabbitmq:\/\/localhost\/subscriber&quot;);       \/\/\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 KeyWasPressed. \u041f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438      \/\/\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d      sbc.Subscribe(subs =&gt; subs.Handler&lt;KeyWasPressed&gt;(msg =&gt;      Console.WriteLine(&quot;{0}{1}{2}{3}&quot;,Environment.NewLine,&quot;Key  '&quot;, msg.PressedKey, &quot;' was pressed&quot;)      )); }); <\/code><\/pre>\n<h5>\u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c.<\/h5>\n<p>  <\/p>\n<pre><code class=\"cs\">IServiceBus publisher = ServiceBusFactory.New(sbc =&gt; {     \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c rabbitMq      sbc.UseRabbitMq();      \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f                   sbc.ReceiveFrom(&quot;rabbitmq:\/\/localhost\/publisher&quot;); }); <\/code><\/pre>\n<p>  MassTransit \u043d\u0435 \u0434\u0435\u043b\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b ServiceBus \u043d\u0430 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0445\u043e\u0442\u044f \u0438\u043d\u043e\u0433\u0434\u0430, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c publisher, \u043c\u044b \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c. <br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0430\u0436\u0430\u0442\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0448\u0438\u043d\u0443.  <\/p>\n<pre><code class=\"cs\">while (true) {    publisher.Publish(new KeyWasPressed() { PressedKey = Console.ReadKey().Key }); } <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0436\u043c\u0435\u043c \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0438.<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/00a\/783\/36a\/00a78336abd8b6cef524cfa831b195b3.png\"\/><\/p>\n<h4>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439.<\/h4>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u2014 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a RabbitMQ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 RabbitMQ \u043a\u0430\u043a \u0441\u043b\u0443\u0436\u0431\u0443 Windows, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0431 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c, \u0442\u0430\u043a\u0436\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043b\u044f \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0433\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">1) \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 sbin \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, %PROGRAMFILES%\\RabbitMQ Server\\rabbitmq_server_2.7.1\\sbin\\)<\/p>\n<p>  2) \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443.<br \/>  rabbitmq-plugins.bat enable rabbitmq_management<\/p>\n<p>  3) \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 RabbitMQ. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0443\u0436\u0431\u044b:<br \/>  rabbitmq-service.bat stop<br \/>  rabbitmq-service.bat install<br \/>  rabbitmq-service.bat start<br \/>  \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 <a href=\"http:\/\/localhost:15672\/mgmt\/\">\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/a> (\u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u043f\u043e\u0440\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 55672). \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u044d\u043a\u0440\u0430\u043d, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443:<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/77c\/726\/998\/77c726998a092518d5adb1febd68508a.png\"\/><br \/>  \u041b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e guest\/guest. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u043e\u0431\u043c\u0435\u043d\u0430. <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a, MT \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u043e\u0431\u043c\u0435\u043d\u0430 (exchange) \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 Namespace:ClassName \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043a \u043d\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430, \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c MT:KeyWasPressed \u0438 \u044d\u0442\u0430 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u043e\u0434\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u2014 subscriber. <br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/2e3\/b49\/169\/2e3b491697aff3770758e7c9f33b7721.png\"\/><br \/>  \u0412 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 MT \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 (durable), \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b \u0431\u0430\u0433 \u044d\u0442\u043e \u0438\u043b\u0438 \u0444\u0438\u0447\u0430, \u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 Permanent(), \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0435\u0439 \u0442\u043e\u0447\u043a\u0443 \u043e\u0431\u043c\u0435\u043d\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443\u0434\u043e\u0431\u043d\u044b \u0442\u0435\u043c, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u043c\u0438\u043c\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430, \u0430 \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0442\u0438\u0445\u043e\u043d\u044c\u043a\u043e \u0434\u043e\u0436\u0434\u0435\u0442\u0441\u044f \u0435\u0433\u043e (\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. <\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432.<\/h4>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043d\u0435\u0433\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 KeyWasPressed. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c anothersubscriber \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438.<\/p>\n<pre><code class=\"cs\">IServiceBus anotherSubscriber = ServiceBusFactory.New(sbc =&gt; {    sbc.UseRabbitMq();    sbc.ReceiveFrom(&quot;rabbitmq:\/\/localhost\/anothersubscriber&quot;);    sbc.Subscribe(subs =&gt; subs.Handler&lt;KeyWasPressed&gt;(msg =&gt;        Console.WriteLine(&quot;{0}{1}{2}{3}&quot;, Environment.NewLine, &quot;Key with code  &quot;, (int) msg.PressedKey, &quot; was pressed&quot;)    )); }); <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0438.<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/11c\/ec7\/3ec\/11cec73ecbd2f3db061bd8a927000fa6.png\"\/><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u0415\u0441\u043b\u0438 \u0437\u0430\u0439\u0442\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043a \u0442\u043e\u0447\u043a\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 MT:KeyWasPressed \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043e \u0443\u0436\u0435 \u0434\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 subscriber \u0438 anothersubscriber. \u0418 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 MT.KeyWasPressed \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 RabbitMQ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043e\u0431\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. <\/p>\n<h4>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u044f\u0437\u043a\u0438 MassTransit + RabbitMQ \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438. <br \/>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u043e\u0434 \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0434\u0438\u043d \u2014 \u044d\u0442\u043e \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u0430, \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u043e\u043c\u0435\u0440 \u0434\u0432\u0430 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u043f\u044f\u0442\u0438. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043c\u044b, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0431\u0443\u0434\u0435\u043c \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c filesToConvert, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0443 \u043d\u0430\u0441 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 VideoFile. <\/p>\n<pre><code class=\"cs\">public class VideoFile {   public int Num { get; set; }   \/\/\u0412\u0440\u0435\u043c\u044f, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0435\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043c\u0441   public int TimeToConvert { get; set; } } <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0438\u0433\u0440\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0441\u043d\u0443\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u043b\u0435 TimeToConvert \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. <br \/>  \u041a\u043e\u0434, \u043f\u043e \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.  <\/p>\n<pre><code class=\"cs\">int firstServerFilesCount = 0; IServiceBus firstServer = ServiceBusFactory.New(sbc =&gt; {      sbc.UseRabbitMq();      \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439      sbc.SetConcurrentConsumerLimit(3);      sbc.Subscribe(subs =&gt; subs.Handler&lt;VideoFile&gt;(msg =&gt;        {        firstServerFilesCount++;         Thread.Sleep(msg.TimeToConvert);        Console.WriteLine(&quot;\u0421\u0435\u0440\u0432\u0435\u0440 1. {0}\u0424\u0430\u0439\u043b {1} \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0437\u0430 {2} \u043c\u0441. \u041f\u043e\u0442\u043e\u043a\u043e\u0432: {3} \u0438\u0437 3. ThreadId - {4}&quot;, Environment.NewLine, msg.Num, msg.TimeToConvert, firstServerFilesCount, Thread.CurrentThread.ManagedThreadId);          firstServerFilesCount--;        }));        \/\/prefetch=3. \u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043e \u0442\u0440\u0435\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e         sbc.ReceiveFrom(&quot;rabbitmq:\/\/localhost\/filesToConvert?prefetch=3&quot;);  }); <\/code><\/pre>\n<p>  \u041f\u043e \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u043c\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u043c\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 SetConcurrentConsumerLimit \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c 3. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 firstServer \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, MassTransit \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0433\u043e\u0442\u043e\u0432\u0435 \u043f\u0443\u043b \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f RabbitMQ, \u0438 \u043e\u043d \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 firstServer \u0433\u043e\u0442\u043e\u0432 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043e \u0442\u0440\u0435\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 prefetch \u0432 Uri, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 firstServer \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041a\u043e\u0434, \u043f\u043e \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.  <\/p>\n<pre><code class=\"cs\">int secondServerFilesCount = 0; IServiceBus secondServer = ServiceBusFactory.New(sbc =&gt; {    sbc.UseRabbitMq();    \/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439    sbc.SetConcurrentConsumerLimit(5);    sbc.Subscribe(subs =&gt; subs.Handler&lt;VideoFile&gt;(msg =&gt;    {      secondServerFilesCount++;      Thread.Sleep(msg.TimeToConvert);      Console.WriteLine(&quot;\u0421\u0435\u0440\u0432\u0435\u0440 2. {0}\u0424\u0430\u0439\u043b {1} \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0437\u0430 {2} \u043c\u0441. \u041f\u043e\u0442\u043e\u043a\u043e\u0432: {3} \u0438\u0437 5. ThreadId - {4}&quot;, Environment.NewLine, msg.Num, msg.TimeToConvert, secondServerFilesCount, Thread.CurrentThread.ManagedThreadId);      secondServerFilesCount--;     }));     \/\/prefetch=3. \u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043e \u043f\u044f\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e      sbc.ReceiveFrom(&quot;rabbitmq:\/\/localhost\/filesToConvert?prefetch=5&quot;); }); <\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u0438\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432 \u043f\u0443\u043b\u0435, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 prefetch \u0432 Uri. \u041a\u0443\u0434\u0430 \u0432\u0430\u0436\u043d\u0435\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 secondServer \u043a \u0442\u043e\u0439 \u0436\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u043a\u0443\u0434\u0430 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d firstServer, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c\u0438 \u0437\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b firstServer \u0438 secondServer \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c, \u0442\u043e \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u0432\u0430\u0436\u0434\u044b, \u043f\u043e \u0440\u0430\u0437\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434, \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c filesToConvert \u0441\u043e\u0442\u043d\u0435\u0439 \u201c\u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432\u201d, \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438.  <\/p>\n<pre><code class=\"cs\">Random rnd = new Random(); for (int i = 1; i &lt;= 100; i++) {   publisher.Publish(new VideoFile() {Num = i, TimeToConvert = rnd.Next(100, 5000)}); } <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430-\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/094\/cc5\/2a8\/094cc52a8b235d32ee3bb0ea60d94fb2.png\"\/><\/p>\n<h4>\u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430\u043c MassTransit.<br \/>  <\/h4>\n<p>  \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 MassTransit, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c (\u0447\u0435\u043c \u044f \u0438 \u0437\u0430\u0439\u043c\u0443\u0441\u044c).<\/p>\n<ul>\n<li> <strong>Sagas.<\/strong> \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/li>\n<\/ul>\n<ul>\n<li><strong>Scheduling<\/strong> \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Quartz.net \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. <\/li>\n<\/ul>\n<ul>\n<li><strong>Diagnostics.<\/strong> \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"http:\/\/www.eaipatterns.com\/ControlBus.html\"> ControlBus<\/a>, <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/aa373083(v=vs.85).aspx\">PerfomanceCounters<\/a><\/li>\n<\/ul>\n<p>. <\/p>\n<ul>\n<li><strong>Rx integration.<\/strong> \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"http:\/\/msdn.microsoft.com\/ru-ru\/data\/gg577609.aspx\">Rx Extensions<\/a>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Encryption.<\/strong> \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u0447\u043d\u044b\u0439 \u0448\u0438\u0444\u0440 Rijndael.<\/li>\n<\/ul>\n<ul>\n<li><strong>Unit Testability.<\/strong> \u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, MassTransit \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 (Loopback), \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 MQ \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/li>\n<\/ul>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/github.com\/steamru85\/MTExamples)\">\u0437\u0434\u0435\u0441\u044c<\/a>.   \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/210428\/\"> http:\/\/habrahabr.ru\/post\/210428\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/0ec\/946\/515\/0ec946515ef338c16f8beb61a680e40d.png\" alt=\"MassTransit\" align=\"left\"\/><br \/>  \u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u044f \u0443\u0441\u043b\u044b\u0448\u0430\u043b \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"http:\/\/masstransit-project.com\/\"> MassTransit<\/a> (MT) \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u044d\u043a\u0441-\u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u0437\u0430\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u0432 \u043d\u0430\u0448 \u043e\u0444\u0438\u0441 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043e\u043f\u044b\u0442\u043e\u043c. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 MT \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0434\u043b\u044f \u043d\u0430\u0441, \u0447\u0443\u0436\u043e\u0439 \u043e\u043f\u044b\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u041f\u043e\u043c\u0438\u043c\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 MT \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f \u043d\u0430\u043c \u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-210428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/210428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=210428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/210428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=210428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=210428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=210428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}