SlideShare a Scribd company logo
СИСТЕМЫ ОБМЕНА
СООБЩЕНИЯМИ
НА ПРИМЕРЕ БИБЛИОТЕКИ MASSTRANSIT
ПОВАР ЯКОВ
MSK .NET MEETUP #3
СОДЕРЖАНИЕ
2
MSK .NET MEETUP #3
• ТИПЫ ИНТЕГРАЦИИ
• ОБМЕН СООБЩЕНИЯМИ
• RABBITMQ
• MASSTRANSIT: ПРОСТОЕ
• MASSTRANSIT: ПОСЛОЖНЕЕ
ЗАЧЕМ?
3
MSK .NET MEETUP #3
Ui
app
ИНТЕГРАЦИЯ
ПРИЛОЖЕНИЙ
4
MSK .NET MEETUP #3
• РАСПРЕДЕЛЕНИЕ НАГРУЗКИ
• ОТЛОЖЕННАЯ ОБРАБОТКА
• РАЗНЕСЕНИЕ ОТВЕТСТВЕННОСТИ
• СУЩЕСТВУЮЩИЕ ПРИЛОЖЕНИЯ
ОБМЕН ФАЙЛАМИ
5
MSK .NET MEETUP #3
A
FTP, share
B
File.Read
File.Delete
File.WriteAllBytes
ОБЩАЯ БАЗА
6
MSK .NET MEETUP #3
Insert into Orders …
A BSELECT FROM …
WHERE isProcessed =
FALSE
UPDATE…
SET IsProcessed = TRUE
RPC/REST
7
MSK .NET MEETUP #3
• WEB-API
• WCF
• ServiceStack
• …
var client = new HttpClient();
await client.PostAsync(requestUri,content);
A B
MESSAGING
8
MSK .NET MEETUP #3
PRODUCER CONSUMER
Система обмена
сообщениями (middleware)
MESSAGING
9
MSK .NET MEETUP #3
- АСИНХРОННОСТЬ ВЗАИМОДЕЙСТВИЯ
- ЧЕТКО ОПРЕДЕЛЕННЫЙ КОНТРАКТ
- МИНИМИЗИРОВАНА СВЯЗАННОСТЬ (COUPLING)
- УСТОЙЧИВОСТЬ К ОШИБКАМ (FAULT TOLERANCE)
- СВЕЖЕСТЬ ДАННЫХ (DATA FRESHNESS)
КАКИЕ ПЛЮСЫ
НЕМНОГО ИСТОРИИ
Первые messaging системы – TIBCO, IBM MQ.
RabbitMQ, Apache QPID, Kafka, Azure Service Bus NServiceBus MassTransit
MSMQ - messaging system от Microsoft Стандартизация – JMS, AMQP, MQTT.
1980 - 1990е 1997e 2000e
2000e – наше время 2007, 2015 – версия 3.0
10
MSK .NET MEETUP #3
2000 - 2010
MASSTRANSITLIGHTWEIGHT ESB
11
MSK .NET MEETUP #3
12
MSK .NET MEETUP #3
ШИНА
Агент шины
сервис
Агент шины
сервис
Агент шины
Asp.net приложение
БРОКЕРЫ
13
MSK .NET MEETUP #3
MASSTRANSIT
RABBITMQERLANG
14
MSK .NET MEETUP #3
RABBITMQERLANG
15
MSK .NET MEETUP #3
• RABBITMQ_MANAGEMENT
• LOCALHOST:15672
• AMQP 0-9-1
16
MSK .NET MEETUP #3
DEMO
КОМПОНЕНТЫ
17
MSK .NET MEETUP #3
СООБЩЕНИЯ (КОНТРАКТЫ) – КОМАНДЫ И СОБЫТИЯ
CreateCustomer, WorkItemCreated
IBUS – ШИНА, СОЗДАЕТСЯ ПРИ СТАРТЕ
bus.Publish(…)
CONSUMERS – ПОЛУЧАЮТ И ОБРАБАТЫВАЮТ СООБЩЕНИЯ
IConsumer(ConsumeContext)
RABBITMQ
18
MSK .NET MEETUP #3
exchangebindingsqueues
direct fanout topic
q1 q2 q3 q4 q5
*.logs critical.*
РАБОТА НАД
ОШИБКАМИ
RETRY POLICIES
19
MSK .NET MEETUP #3
• None
• Immediate
• Intervals
• Exponential
• Incremental
• …
РАБОТА НАД
ОШИБКАМИ
RETRY POLICIES
20
MSK .NET MEETUP #3
Bus.Factory.CreateUsingInMemory(cfg =>
{
cfg.ReceiveEndpoint("queue_name", ep =>
{
ep.Handler(async cxt => {});
ep.Handler(async cxt => {}, endpointConfig =>
{
endpointConfig.Retry(Retry.None);
});
});
});
РАБОТА НАД
ОШИБКАМИ
МОЖНО ПОДПИСЫВАТЬСЯ НА ОШИБКИ
21
MSK .NET MEETUP #3
public class FaultConsumer : IConsumer<Fault<UpdateCustomerAddress>>
{
public async Task Consume(ConsumeContext<Fault<UpdateCustomerAddress>> context)
{
var originalMessage = context.Message.Message;
var exceptions = context.Message.Exceptions;
//Do something interesting.
}
}
РАБОТА НАД
ОШИБКАМИ
CIRCUIT BREAKER
22
MSK .NET MEETUP #3
23
MSK .NET MEETUP #3
DEMO
САГИLONG RUNNING PROCESS
24
MSK .NET MEETUP #3
?
Service 1
Service 2
Service 3
1
2
3
САГИLONG RUNNING PROCESS
• Сага – распределенный процесс с общим координатором
• Состоят из действий, событий и состояния
• Сохраняются в репозитории
• Описывается как конечный автомат
25
MSK .NET MEETUP #3
САГИLONG RUNNING PROCESS
26
MSK .NET MEETUP #3
САГИПРИМЕР
27
MSK .NET MEETUP #3
28
MSK .NET MEETUP #3
DEMO
COURIER
29
MSK .NET MEETUP #3
ROUTING SLIP
• Карта маршрутизации (EIP)
• Позволяет динамически определять маршрут обработки сообщения
• Routing slip включает с себя маршрут (Itinerary). Itinerary - это список
Activity
• Этот маршрут вместе с сообщением отправляется по шине
• Каждая activity имеет два метода: execute, compensate.
COURIER
30
MSK .NET MEETUP #3
ROUTING SLIP
bus
Activity 1
Activity 2
Activity 3
31
MSK .NET MEETUP #3
DEMO
РАЗВЕРТЫВАНИЕ
32
MSK .NET MEETUP #3
HostFactory.Run(x =>
{
x.Service<TownCrier>(s =>
{
s.ConstructUsing(name=> new TownCrier());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Sample Topshelf Host");
x.SetDisplayName("Stuff");
x.SetServiceName("Stuff");
});
TOPSHELF
33
MSK .NET MEETUP #3
ЧТО ЕЩЕ
1. Отложенная отправка (scheduling)
через Quartz .Net
2. Сообщения как Streams через Reactive
Extensions
3. Unit tests через встроенный
framework для тестирования
4. Счетчики производительности
5. Turnouts – долгоживущие consumers
6. Request-reply – двухсторонее
взаимодействие
7. Greenpipes – pipes & filters
8. Поддержка ioc контейнеров
34
MSK .NET MEETUP #3
В ЗАКЛЮЧЕНИИ
1.  Расширяемость
2.  Просто обеспечить надежность
3.  Легко масштабировать
4.  Другая модель взаимодействия
5.  В RPC клиент может контролировать что ему нужно
6.  RPC есть практически везде, messaging нет
7.  Не знаем когда работает или нет
8.  Можно комбинировать
35
MSK .NET MEETUP #3
MESSAGING VS RPC
ЧТО ПОЧИТАТЬ
1. Enterprise integration patters (Addison-Wesley, 2004)
2. SOA Patterns (manning, 2012)
3. Building microservices (2015, O'Reilly Media)
4. DotNetRocks подкасты (https://www.dotnetrocks.com, 798, 1228, 1242, 1055)
5. http://blog.phatboyg.com, https://lostechies.com/chrispatterson
6. https://github.com/MassTransit/MassTransit
7. https://github.com/jacobpovar/DotNetMsk
8. Jacob.povar@gmail.com
36
MSK .NET MEETUP #3
СПАСИБО ЗА
ВНИМАНИЕ
ДО НОВЫХ ВСТРЕЧ
MSK .NET MEETUP #3

More Related Content

Similar to Яков Повар "Системы обмена сообщениями на примере MassTransit"

42
4242
42JIuc
 
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сетиДемонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
Cisco Russia
 
Сеть на Linux
Сеть на LinuxСеть на Linux
Сеть на Linux
Кирилл К.
 
Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3
Aleksey Bragin
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Pavel Treshnikov
 
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
ARCCN
 
40
4040
40JIuc
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
Routing
RoutingRouting

Similar to Яков Повар "Системы обмена сообщениями на примере MassTransit" (10)

42
4242
42
 
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сетиДемонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
Демонстрация работы интеллектуальной подсистемы управления в многоуровневой сети
 
Сеть на Linux
Сеть на LinuxСеть на Linux
Сеть на Linux
 
Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
 
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
Многопоточная маршрутизация в SDN Евгений Чемерицкий, Евгений Степанов, ЦПИКС
 
40
4040
40
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
Routing
RoutingRouting
Routing
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 

Яков Повар "Системы обмена сообщениями на примере MassTransit"