Simeon Simeonov
Skaffe seg maskin og SSL sertifikat(er)
Bruke Ansible
Opprette administrator-bruker og slette guest-brukeren
Sette rettigheter og opprette entiteter
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
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 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)
RabbitMQ implementerer 2 rettighetsnivåer(*):
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
(*) - /etc/rabbitmq/rabbitmq.config gir flere muligheter
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 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_ms_all vil være et passende navn for køen som brukes av AD-microservice mottakeren.
"Avsendere vil vanligvis sende meldinger til exchange ex_messages."
Det er flere typer exchange, men vi vil bruke kun topic exchange.
Routing keys i topic exchange
Bindinger
Protokoller og porter
Exempler
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
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_ms_all 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_ms_all.
En kø kan bli bundet med én eller flere nøkler til en topic exchange.
"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:
$ pip install pika
Python:
"Well, we'll not risk another frontal assault. That rabbit's dynamite...."
RabbitMQ:
http://www.rabbitmq.com - RabbitMQ sin offisielle side
http://www.rabbitmq.com/configure.html - Generell konfigurasjon av RabbitMQ
http://www.rabbitmq.com/management.html - Bruk av rabbitmq_management plugin i RabbitMQ
http://www.rabbitmq.com/access-control.html - Tilgangskontroll i RabbitMQ
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html - rabbitmqctl manual side
http://www.rabbitmq.com/tutorials/amqp-concepts.html - Generelt om AMQP og forskjellige exchanges
UiO:
Bøker:
RabbitMQ in action - Alvaro Videla / Jason J.W. Williams - 2012 - Manning
Mastering RabbitMQ - Ayanoglu / Aytas / Nahum - 2015 - PACKT Publishing