$30 off During Our Annual Pro Sale. View Details »

Izhevsk PHP Meetup #1. Ассинхронизируй это (или основы работы с rabbitmq)

Izhevsk PHP Meetup #1. Ассинхронизируй это (или основы работы с rabbitmq)

Святослав Молодских, ведущий разработчик, Центр Высоких Технологий
Ретроспективная рефлексия опыта разработки систем с асинхронной обработкой данных. Что же мы делали с кроликом не так, и как мы делаем теперь.

Izhevsk PHP Meetup

December 08, 2016
Tweet

More Decks by Izhevsk PHP Meetup

Other Decks in Technology

Transcript

  1. Ассинхронизируй это
    или основы работы с
    RabbitMQ

    View Slide

  2. Кто я?
    • Святослав Молодских
    • Работаю 8 лет в одной компании, большую часть
    времени программистом
    • Люблю использовать инструменты по
    назначению.

    View Slide

  3. View Slide

  4. AMQP
    • Message
    • Exchange
    • Queue

    View Slide

  5. RabbitMQ
    P Exchange C

    View Slide

  6. Почему RabbitMQ
    • Он довольно быстрый
    • Кластеризация
    • Большое количество клиентов на разных языках
    • Возможность трейса и приятный встроенный
    management UI

    View Slide

  7. Первая ошибка
    P C

    View Slide

  8. Месяц спустя
    P C
    P C
    P C
    P C

    View Slide

  9. Полгода спустя

    View Slide

  10. И что?

    View Slide

  11. Ситуация №1
    P1 C1
    P2 C2
    Queue 1
    Queue 2

    View Slide

  12. Что же делать?
    P Exchange
    C1
    C2
    Queue 1
    Queue 2

    View Slide

  13. Ситуация №2
    P1
    C1
    C2

    View Slide

  14. А с этим что делать?
    P Exchange
    C1
    C2
    Queue 1
    Queue 2
    routing key 1
    routing key 2

    View Slide

  15. Следующая проблема

    View Slide

  16. Что отправить?
    • Сериализованный документ
    • Id

    View Slide

  17. Случай 1
    P Exchange C

    View Slide

  18. Случай 2
    P Exchange C
    Domain Service

    View Slide

  19. Случай 3
    P Exchange C

    View Slide

  20. Случай 4
    P Exchange C

    View Slide

  21. View Slide

  22. Виды сообщений
    • Event message
    • Command message
    • Request message

    View Slide

  23. Событие
    • Сообщение, которое говорит, что что-то
    случилось
    • Дает возможность отреагировать на
    происходящее

    View Slide

  24. P Account (direct)
    C1
    C2
    Queue 1
    Queue 2
    created
    updated

    View Slide

  25. P Account (direct)
    C2
    C3
    Queue 2
    Queue 3
    created
    updated
    C1
    Queue 1
    C4
    Queue 4

    View Slide

  26. P2
    C2
    C3
    Queue 2
    Queue 3
    C1
    Queue 1
    C4
    Queue 4
    P1
    Account.created (fanout)
    Account.updated (fanout)

    View Slide

  27. Запуск команд
    P Account (direct)
    C1
    C2
    Queue 1
    Queue 2
    create
    update

    View Slide

  28. Запрос данных
    • Выполнение команды, которая возвращает
    данные.

    View Slide

  29. P Account (direct) C1
    Queue 1
    list
    reply-to

    View Slide

  30. Еще одна ошибка

    View Slide

  31. Dead letter exchange
    P Exchange C
    dlx

    View Slide

  32. Вопросы

    View Slide