+ All Categories
Home > Documents > RabbitMQ - WUG Česká republika

RabbitMQ - WUG Česká republika

Date post: 06-Jan-2022
Category:
Upload: others
View: 15 times
Download: 0 times
Share this document with a friend
51
Tomáš Jecha (MVP) [email protected] jechtom www.jecha.net Školení vývojářů www.dotNETcollege.cz Články a diskuzní fóra www.VbNet.cz RabbitMQ
Transcript
Page 1: RabbitMQ - WUG Česká republika

Tomáš Jecha (MVP)

[email protected]

jechtom

www.jecha.net

Školení vývojářů

www.dotNETcollege.cz

Články a diskuzní fóra

www.VbNet.cz

RabbitMQ

Page 2: RabbitMQ - WUG Česká republika

Program

• Úvod, instalace, konfigurace

• Fronty, publikace a čtení zpráv

• Pokročilé routování zpráv

• Demo – implementace do stávající aplikace

• Pluginy

• Další postupy

Page 3: RabbitMQ - WUG Česká republika

ÚVOD, INSTALACE, KONFIGURACE

Page 4: RabbitMQ - WUG Česká republika

RabbitMQ

• Open source message broker

• Pod hlavičkou VMware

• Multiplatformní

– Windows, Linux / Unix, Mac OS X

• Napsané v jazyce Erlang

• Podpora řady vývojářských platforem

Page 5: RabbitMQ - WUG Česká republika

Komunikace se serverem

• Klienti (oficiálně):

– .NET, Java, Erlang

• Klienti (neoficiálně)

– Ruby, Python, PHP, Perl, C/C++, Lisp, Haskell, Ocaml, Go, Amazon EC2…

• Protokoly:

– AMQP+ (0.9.1)

– STOMP (1.0, 1.1, 1.2)

– Management REST HTTP API

Page 6: RabbitMQ - WUG Česká republika

Advanced Message Queuing Protocol

• Standardizovaný, otevřený (www.amqp.org)

– Microsoft, VMware, Cisco, Red Hat

• Binární protokol pro bezpečný a spolehlivý

přenos zpráv

• Implementován například:

– Windows Azure Service Bus,

ApacheMQ, StormMQ

• RabbitMQ – verze 0.9.1 + extenze

Page 7: RabbitMQ - WUG Česká republika

Instalace

• „Erlang Windows Binary File“

– Erlang runtime (Erricson)

• „RabbitMQ Server “ pro Windows

– Serverová windows služba

– Základní sada pluginů

– Konzolové příkazy na správu

Page 8: RabbitMQ - WUG Česká republika

Konfigurace a správa

• Příkazy: – rabbitmqctl.bat

• Hlavní konfigurace (uživatelé, zabezpečení, cluster...)

– rabbitmq-plugins.bat • Povolování / zakazování pluginů

– rabbitmq-server.bat • Standalone server

– rabbitmq-service.bat • Správa serveru jako Windows služby

• Environment variables (RABBITMQ_BASE)

• Konfigurační soubory

• Web management plugin (http://localhost:15672/)

Page 9: RabbitMQ - WUG Česká republika

demo Instalace a konfigurace

Web management plugin

Konfigurace permissions

Page 10: RabbitMQ - WUG Česká republika

Client Consumer

RabbitMQ Server

Client Publisher

Consume

Architektura RabbitMQ

Queue Routing Exchange Publish

Page 11: RabbitMQ - WUG Česká republika

Exchanges

• Fronta pro předávání zpráv

• Příjímá zprávy od: – Klientů (publisher)

– Jiných exchanges

• Zpráva je vyřazena při: – Předání všem odpovídajícím cílům

• Vlastnosti: – Binding – kam zprávy předávat?

– Type (fanout, direct, topic, headers)

– Durable/Transient

– Internal, Alternate Exchange

– Custom properties

Page 12: RabbitMQ - WUG Česká republika

Queues

• Fronta zpráv

• Přijímá zprávy od Exchanges

• Zpráva je vyřazena při:

– Potvrzení/odmítnutí konzumeterem

– Vypršení TTL

• Vlastnosti:

– Durable/Transient

– TTL, Dead Letter Exchange, Auto Delete

– Custom properties

Page 13: RabbitMQ - WUG Česká republika

Zpráva

• Směrování

– Exchange

– RouteKey

• Properties

– System properties

(DeliveryMode, CorrelationId, ApplicationId...)

– Custom properties

• Obsah

Page 14: RabbitMQ - WUG Česká republika

FRONTY, PUBLIKACE A ČTENÍ

ZPRÁV

Page 15: RabbitMQ - WUG Česká republika

Defaultní Exchange

• Zasílání zpráv přímo do front

– Automaticky vyhledá front podle RouteKey zprávy

• Vhodné pro jednodušší scénáře

– Není potřeba Exchange vytvářet nebo

konfigurovat, stačí založit frontu

• Jméno: „“ (empty string)

Page 16: RabbitMQ - WUG Česká republika

RabbitMQ Server

Client Publisher

Default Exchange

Queue Q1

Queue Q2

Publish Default

Exchange

A; RouteKey=Q1

B; RouteKey=Q2

C; RouteKey=Q3

A; RouteKey=Q1

B; RouteKey=Q2

Page 17: RabbitMQ - WUG Česká republika

demo Nová fronta

Publikace zpráv – C#

Page 18: RabbitMQ - WUG Česká republika

Další vlastnosti zpráv

• Delivery mode • 1 = Non-persistent; 2 = Persistent

• AppId • Identifikátor zdroje

• CorrelationId • Párování zpráv (například RPC volání)

• Reply To • Jméno exchange pro odpověď (RPC)

• Content Encoding & Content Type • Informace o obsah zprávy

Page 19: RabbitMQ - WUG Česká republika

Konzumace zpráv

• Způsob doručení: – Pull – příkaz „Get“, získá 1 zprávu

– Push – příkaz „Consume“, přihlášení k odběru

• Potvrzování zpráv – Bez potvrzení (noAck=true)

• Zpráva je po doručení považována za zpracovanou

– S potvrzením (noAck=false) • Zpráva je po doručení ve stavu „nepotvrzena“ a čeká se na

„Ack“ / „Nack“ (Reject)

• Pokud zprávu zamítneme, lze je: – „Zabít“ (requeue=false)

– Nebo vrátit do fronty (requeue=true)

Page 20: RabbitMQ - WUG Česká republika

demo Konzumace zpráv

Použití čtení Pull vs Push

Potvrzování / odmítání zpráv

Page 21: RabbitMQ - WUG Česká republika

POKROČILÉ ROUTOVÁNÍ ZPRÁV

Page 22: RabbitMQ - WUG Česká republika

Typy Exchanges

• Fanout

• Direct

• Topics

• Headers

Page 23: RabbitMQ - WUG Česká republika

Typy Exchanges

• Fanout

– Distribuce všem bindovaným odběratelům

• Direct

• Topics

• Headers

Page 24: RabbitMQ - WUG Česká republika

RabbitMQ Server

Client Publisher

Fanout Exchange

Queue Q1

Queue Q2

Publish Fanout

Exchange

A B C

A B C

A B C

Page 25: RabbitMQ - WUG Česká republika

demo Fanout Exchange

Page 26: RabbitMQ - WUG Česká republika

Typy Exchanges

• Fanout

• Direct

– Rozhoduje parametr zprávy RouteKey

– Bude odeslána routováním, kterém má

nastavený shodný RouteKey

• Topics

• Headers

Page 27: RabbitMQ - WUG Česká republika

RabbitMQ Server

Client Publisher

Direct Exchange

Queue Q1

Queue Q2

Publish Direct

Exchange

A; RK=first

B; RK=first

C; RK=second

A; RK=first

B; RK=first

C; RK=second

D; RK=other

Page 28: RabbitMQ - WUG Česká republika

demo Direct Exchange

Page 29: RabbitMQ - WUG Česká republika

Typy Exchanges

• Fanout

• Direct

• Topics

– Podobně jako u „Direct“ rozhoduje parametr zprávy RouteKey

– Zástupné znaky: * = libovolné jedno slovo (oddělená tečkama)

# = žádné nebo více libovolných slov

• Headers

Page 30: RabbitMQ - WUG Česká republika

RabbitMQ Server

Client Publisher

Topics Exchange

Queue Q1

Queue Q2

Publish Topics

Exchange

A; RK=color.blue

C; RK=animal.dog

B; RK=color.red.dark

A; RK=color.blue

B; RK=color.red.dark

C; RK=animal.dog

D; RK=animal.dog.x

Page 31: RabbitMQ - WUG Česká republika

demo Topics Exchange

Page 32: RabbitMQ - WUG Česká republika

Typy Exchanges

• Fanout

• Direct

• Topics

• Headers

– Pokročilejší routování podle libovolných vlastností

zprávy (ne jen podle RouteKey)

Page 33: RabbitMQ - WUG Česká republika

DEMO – IMPLEMENTACE DO

STÁVAJÍCÍ APLIKACE

Page 34: RabbitMQ - WUG Česká republika

Proč používat fronty?

• Aplikace spolu nekomunikují přímo

• Technologická nezávislost

• Výpadek aplikace nemusí způsobit výpadek

celé služby

• Bezpečnost

• Možnost opakovat události

Page 35: RabbitMQ - WUG Česká republika

Modelová aplikace

E-shop

Order Service Mail Service

DB MAIL

SERVER

Nová objednávka

Page 36: RabbitMQ - WUG Česká republika

demo Stávající implementace

Page 37: RabbitMQ - WUG Česká republika

Order processor Mail Sender

Modelová aplikace

E-shop

Order Service Impl

Mail Service Impl

DB

RabbitMQ

MAIL SERVER

Nová objednávka

Order Queue

Mail Queue

Order Service RabbitMQ

Mail Service RabbitMQ

Page 38: RabbitMQ - WUG Česká republika

demo Implementace

Page 39: RabbitMQ - WUG Česká republika

PLUGINY

Page 40: RabbitMQ - WUG Česká republika

Pluginy

• Serverové:

– Management Plugin – Webový interface

– STOMP – Simple Text Messaging Protocol

– Autentifikace pomocí LDAP

– SSL komunikace

Page 41: RabbitMQ - WUG Česká republika

• Nový typ exchange „Federation“ konzumuje

zprávy vložené do vzdálených „Upstream“

exchanges

RabbitMQ Server #2

RabbitMQ Server #1

Federation Plugin

Queue Routing Publish Upstream link Upstream Exchange

Federation Exchange

Page 42: RabbitMQ - WUG Česká republika

RabbitMQ Server #2

• „Přehazuje“ zprávy z jedné fronty do

libovolného exchange na druhém brokeru

• Podobný jako Federation plugin, jen na nižší

úrovni

RabbitMQ Server

#1

Shovel Plugin

Queue Exchange Shovel plugin Consume Publish

Page 43: RabbitMQ - WUG Česká republika

DALŠÍ POSTUPY

Page 44: RabbitMQ - WUG Česká republika

• WCF transportní vrstva pomocí front

• Lze použít pouze na synchronní volání

(služba musí být v době volání online)

• Používá se CorrelationId a Reply_To

RabbitMQ Server

RabbitMQ.ServiceModel

Temporary Queue

#1

Client Service

Publish request Consume request

Consume request Temporary

Queue #2

Publish response

Page 45: RabbitMQ - WUG Česká republika

Dead Letter Exchange

• „Dead Letter “ je zpráva ve frontě, která by měla

zaniknout z důvodu:

– Expirace (TTL)

– Nebo odmítnutí klientem (rejected)

• Lze nastavit vlastnosti:

x-dead-letter-exchange x-dead-letter-routing-key

– Událost se následně směruje do vybrané exchange

– Do vlastností se přidají informace

Page 46: RabbitMQ - WUG Česká republika

demo Dead Letter Exchange

Page 47: RabbitMQ - WUG Česká republika

Clustering

• RabbitMQ podporuje clusterování

• Konfigurace nodů je sjednocená

• Fronty v clusteru jsou mirrorované z jednoho „mastera“ na:

– Všechny nody

– Nebo konkrétní nody

– Nebo určitý počet nodů

– Nebo nejsou mirrorované vůbec

• Pouze do LAN - výpadky spojení nenese dobře

Page 48: RabbitMQ - WUG Česká republika

Virtual Hosts

• Logicky rozděluje objekty v brokeru

• Každý virtual host může obsahovat vlastní:

– Queues

– Exchanges

– Konfiguraci zabezpečení

• Identifikován jménem

– Defaultně pouze 1 virtual host „/“

Page 49: RabbitMQ - WUG Česká republika

Kdo používá Erlang & RabbitMQ?

• Erlang:

– Facebook chat

– CouchDB

– GitHub

– Amazon SimpleDB

• RabbitMQ:

– VMware – cloudové a virtualizační systémy

– NASA - NEBULA Cloud Computing Platform

– Google – Rocksteady projekt

– Microsoft, AT&T, Mozzila, BBC, Digg…

Page 50: RabbitMQ - WUG Česká republika

Další zdroje

• RabbitMQ - www.rabbitmq.com

• AMQP (protocol) – www.amqp.org

• Erlang (language) – www.erlang.org

• Kurz C115 – dotNETcollege.cz

Page 51: RabbitMQ - WUG Česká republika

Tomáš Jecha (MVP)

[email protected]

jechtom

www.jecha.net

Školení vývojářů

www.dotNETcollege.cz

Články a diskuzní fóra

www.VbNet.cz


Recommended