37
СИСТЕМЫ ОБМЕНА СООБЩЕНИЯМИ НА ПРИМЕРЕ БИБЛИОТЕКИ MASSTRANSIT ПОВАР ЯКОВ MSK .NET MEETUP #3

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

Embed Size (px)

Citation preview

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

СИСТЕМЫ ОБМЕНА СООБЩЕНИЯМИ

НА ПРИМЕРЕ БИБЛИОТЕКИ MASSTRANSIT

ПОВАР ЯКОВ

MSK .NET MEETUP #3

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

СОДЕРЖАНИЕ

2MSK .NET MEETUP #3

• ТИПЫ ИНТЕГРАЦИИ

• ОБМЕН СООБЩЕНИЯМИ

• RABBITMQ

• MASSTRANSIT: ПРОСТОЕ

• MASSTRANSIT: ПОСЛОЖНЕЕ

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

ЗАЧЕМ?

3MSK .NET MEETUP #3

Ui

app

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

ИНТЕГРАЦИЯ ПРИЛОЖЕНИЙ

4MSK .NET MEETUP #3

• РАСПРЕДЕЛЕНИЕ НАГРУЗКИ

• ОТЛОЖЕННАЯ ОБРАБОТКА

• РАЗНЕСЕНИЕ ОТВЕТСТВЕННОСТИ

• СУЩЕСТВУЮЩИЕ ПРИЛОЖЕНИЯ

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

ОБМЕН ФАЙЛАМИ

5MSK .NET MEETUP #3

A

FTP, share

BFile.Read

File.DeleteFile.WriteAllBytes

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

ОБЩАЯ БАЗА

6MSK .NET MEETUP #3

Insert into Orders …

A BSELECT FROM …WHERE isProcessed = FALSE

UPDATE…SET IsProcessed = TRUE

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

RPC/REST

7MSK .NET MEETUP #3

• WEB-API• WCF• ServiceStack• …

var client = new HttpClient();await client.PostAsync(requestUri,content);

A B

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

MESSAGING

8MSK .NET MEETUP #3

PRODUCER CONSUMERСистема обмена сообщениями (middleware)

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

MESSAGING

9MSK .NET MEETUP #3

- АСИНХРОННОСТЬ ВЗАИМОДЕЙСТВИЯ- ЧЕТКО ОПРЕДЕЛЕННЫЙ КОНТРАКТ- МИНИМИЗИРОВАНА СВЯЗАННОСТЬ (COUPLING)- УСТОЙЧИВОСТЬ К ОШИБКАМ (FAULT TOLERANCE)- СВЕЖЕСТЬ ДАННЫХ (DATA FRESHNESS)

КАКИЕ ПЛЮСЫ

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

НЕМНОГО ИСТОРИИ

Первые 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

10MSK .NET MEETUP #3

2000 - 2010

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

MASSTRANSITLIGHTWEIGHT ESB

11MSK .NET MEETUP #3

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

12MSk .Net meetup #3

ШИНА

Агент шины

сервис

Агент шины

сервис

Агент шины

Asp.net приложение

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

БРОКЕРЫ

13MSK .NET MEETUP #3

MASSTRANSIT

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

RABBITMQERLANG

14MSK .NET MEETUP #3

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

RABBITMQERLANG

15MSK .NET MEETUP #3

• RABBITMQ_MANAGEMENT• LOCALHOST:15672• AMQP 0-9-1

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

16MSK .NET MEETUP #3

DEMO

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

КОМПОНЕНТЫ

17MSK .NET MEETUP #3

СООБЩЕНИЯ (КОНТРАКТЫ) – КОМАНДЫ И СОБЫТИЯCreateCustomer, WorkItemCreated

IBUS – ШИНА, СОЗДАЕТСЯ ПРИ СТАРТЕ bus.Publish(…)

CONSUMERS – ПОЛУЧАЮТ И ОБРАБАТЫВАЮТ СООБЩЕНИЯIConsumer(ConsumeContext)

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

RABBITMQ

18MSK .NET MEETUP #3

exch

ange

bind

ings

queu

es

direct fanout topic

q1 q2 q3 q4 q5

*.logs critical.*

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

РАБОТА НАДОШИБКАМИRETRY POLICIES

19MSK .NET MEETUP #3

• None• Immediate • Intervals• Exponential• Incremental• …

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

РАБОТА НАДОШИБКАМИRETRY POLICIES

20MSK .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); }); });});

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

РАБОТА НАДОШИБКАМИМОЖНО ПОДПИСЫВАТЬСЯ НА ОШИБКИ

21MSK .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. }}

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

РАБОТА НАДОШИБКАМИCIRCUIT BREAKER

22MSK .NET MEETUP #3

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

23MSK .NET MEETUP #3

DEMO

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

САГИLONG RUNNING PROCESS

24MSK .NET MEETUP #3

?

Service 1

Service 2

Service 3

1

2

3

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

САГИLONG RUNNING PROCESS

• Сага – распределенный процесс с общим координатором

• Состоят из действий, событий и состояния

• Сохраняются в репозитории

• Описывается как конечный автомат

25MSK .NET MEETUP #3

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

САГИLONG RUNNING PROCESS

26MSK .NET MEETUP #3

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

САГИПРИМЕР

27MSK .NET MEETUP #3

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

28MSK .NET MEETUP #3

DEMO

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

COURIER

29MSK .NET MEETUP #3

ROUTING SLIP

• Карта маршрутизации (EIP)• Позволяет динамически определять маршрут обработки сообщения• Routing slip включает с себя маршрут (Itinerary). Itinerary - это список

Activity• Этот маршрут вместе с сообщением отправляется по шине• Каждая activity имеет два метода: execute, compensate.

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

COURIER

30MSK .NET MEETUP #3

ROUTING SLIP

bus

Activity 1

Activity 2

Activity 3

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

31MSK .NET MEETUP #3

DEMO

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

РАЗВЕРТЫВАНИЕ

32MSK .NET MEETUP #3

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

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

33MSK .NET MEETUP #3

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

ЧТО ЕЩЕ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 контейнеров

34MSK .NET MEETUP #3

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

В ЗАКЛЮЧЕНИИ1. Расширяемость

2. Просто обеспечить надежность

3. Легко масштабировать

4. Другая модель взаимодействия

5. В RPC клиент может контролировать что ему нужно

6. RPC есть практически везде, messaging нет

7. Не знаем когда работает или нет

8. Можно комбинировать

35MSK .NET MEETUP #3

0

5 0

1 0 0

1

кв

3

кв

В о сто к

Зап ад

С е ве р

MESSAGING VS RPC

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

ЧТО ПОЧИТАТЬ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. [email protected]

36MSK .NET MEETUP #3

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

СПАСИБО ЗА ВНИМАНИЕ

ДО НОВЫХ ВСТРЕЧ

MSK .NET MEETUP #3