RabbitMQ

Intern opplæring


Simeon Simeonov

Agenda


  • Installasjon
  • Administrasjon
  • Utvikling

Installasjon og oppsett


  • Skaffe seg maskin og SSL sertifikat(er)

  • Bruke Ansible

  • Opprette administrator-bruker og slette guest-brukeren

  • Sette rettigheter og opprette entiteter

Ansible


Vi bruker repo UAIT/int-ansible-hosts

Etter å ha installert Ansible på lokalmaskina gjør vi følgende:

  • git clone ssh://git@bitbucket.usit.uio.no:7999/uait/int-ansible-hosts.git

  • cd int-ansible-hosts

  • ansible-playbook --ask-become-pass -v --extra-vars '{"hosts": "mq-hostname"}' rabbitmq_playbook.yml

RabbitMQ skal nå være installert og tilgjengelig på https://mq-hostname

Administrator-bruker


Brukeren guest med passord guest vil eksistere etter at Ansible har kjørt

I tillegg til webgrensesnittet, kan en bruke rabbitmqctl

  • rabbitmqctl list_users (Lister alle eksisterende RabbitMQ-brukere)

  • rabbitmqctl add_user rmq_admin <passord> (Legger til dedikert admin bruker rmq_admin)

  • rabbitmqctl set_user_tags rmq_admin administrator (Gir administrator rolle til rmq_admin)

  • rabbitmqctl delete_user guest (Sletter brukeren guest)

vhost


vhost fungerer som en beholder (container) for RabbitMQ/AMQP objekter. Nok igjen kan en velge mellom webgrensesnitt og rabbitmqctl

  • rabbitmqctl list_vhosts (Lister alle eksisterende vhosts)

  • rabbitmqctl add_vhost /no/uio/integration (Oppretter vhost med navn /no/uio/integration)

Rettigheter

RabbitMQ implementerer 2 rettighetsnivåer:

  • Per vhost
  • Per entitet

RabbitMQ definerer 3 typer operasjoner:

  • configure - opprette / slette entiteter eller endre deres oppførsel

  • write - skrive melding til en entitet

  • read - lese melding fra entitet

Rettigheter og brukere

RabbitMQ bruker regular expressions til å definere rettigheter

  • rabbitmqctl add_user cerebrum <passord>

  • rabbitmqctl add_user uio_ad_microservice <passord>

  • rabbitmqctl set_permissions -p /no/uio/integration cerebrum "^$" "^ex_.*" "^$"

  • rabbitmqctl set_permissions -p /no/uio/integration uio_ad_microservice "^q_ad_ms_.*" "^q_ad_ms_.*" "^(ex_messages|q_ad_ms_.*)$"

Køer

Køer defineres som durable ved hjelp av webgrensesnittet.

"Alle køer (både forhåndsdefinerte og de som defineres av konsument) må ha navn som starter med q_. Køen vil ha navn som uttryker mottakeren som bruker den."

F.eks. q_ad_microservice vil være et passende navn for køen som brukes av AD-microservice mottakeren.

Exchange

"Avsendere vil vanligvis sende meldinger til exchange ex_messages."

Det er flere typer exchange, men vi vil bruke kun topic exchange.

Utvikling


  • Routing keys i topic exchange

  • Bindinger

  • Protokoller og porter

  • Exempler

Routing keys i topic exchange


Routing key settes av sender som en del av meldingen og blir inspisert av brokeren dersom meldingen sendes til en topic exchange.

Strukturen til en topic / message routing key er:

<kilde>.<type>.<objekt>.<hendelse>

F.eks.:

cerebrum.event.person.delete

Bindinger

For at en melding sendt til en topic exchange skal havne i en bestemt kø, må køen være bundet (bound) til exchange.

I topic exchange brukes routing key (topic) til å avgjøre hvilke av meldingene som blir sendt vil havne i køen som er bundet.

Dersom vi binder køen q_ad_microservice til topic exchange ex_messages med binding key cerebrum.event.account.* vil alle meldinger som blir sendt til ex_messages med topic som starter med cerebrum.event.account. havne i q_ad_microservice.

En kø kan bli bundet med én eller flere nøkler til en topic exchange.

Protokoller og porter


"AMQP 0.9.1 prioritert siden det er protokollen som mapper best mot RabbitMQs funksjonalitet. Vi har også noe erfaring med bruk av denne."

RabbitMQ lytter for AMQP0.9.1 på SSL port 5671.


Andre protokoller og tjenester for RabbitMQ:

  • STOMP - 61614 (SSL)
  • RabbitMQ Management (webgrensesnitt) - 15671 (SSL)

Exempler


              
                $ pip install pika
              
            

Python:

"Well, we'll not risk another frontal assault. That rabbit's dynamite...."

Dokumentasjon og lenker


RabbitMQ:

Dokumentasjon og lenker

UiO:

Bøker:

  • RabbitMQ in action - Alvaro Videla / Jason J.W. Williams - 2012 - Manning

  • Mastering RabbitMQ - Ayanoglu / Aytas / Nahum - 2015 - PACKT Publishing