summaryrefslogtreecommitdiff
path: root/reveal.js/rabbitmq.html
diff options
context:
space:
mode:
Diffstat (limited to 'reveal.js/rabbitmq.html')
-rw-r--r--reveal.js/rabbitmq.html311
1 files changed, 0 insertions, 311 deletions
diff --git a/reveal.js/rabbitmq.html b/reveal.js/rabbitmq.html
deleted file mode 100644
index 6d1ba7a..0000000
--- a/reveal.js/rabbitmq.html
+++ /dev/null
@@ -1,311 +0,0 @@
1<!doctype html>
2<html lang="en">
3 <head>
4 <meta charset="utf-8">
5 <title>RabbitMQ - Intern opplæring</title>
6 <meta name="author" content="Simeon Simeonov">
7 <meta name="apple-mobile-web-app-capable" content="yes">
8 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
11 <link rel="stylesheet" href="dist/reset.css">
12 <link rel="stylesheet" href="dist/reveal.css">
13
14 <link rel="stylesheet" href="dist/theme/serif.css" id="theme">
15
16 <!-- Theme used for syntax highlighting of code -->
17 <link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
18 </head>
19 <body>
20 <div class="reveal">
21
22 <!-- Any section element inside of this container is displayed as a slide -->
23 <div class="slides">
24 <section>
25 <h1>RabbitMQ</h1>
26 <h3>Intern opplæring</h3>
27 </br>
28 <p>
29 <small>Simeon Simeonov</small>
30 </p>
31 </section>
32
33 <section>
34 <section id="fragments">
35 <h2>Agenda</h2>
36 </br>
37 <ul>
38 <span class="fragment"><li>Installasjon</li></span>
39 <span class="fragment"><li>Administrasjon</li></span>
40 <span class="fragment"><li>Utvikling</li></span>
41 <span class="fragment"><li>Diverse + Q&A</li></span>
42 </ul>
43 </section>
44 </section>
45
46 <section>
47 <section>
48 <h2>Installasjon og oppsett</h2>
49 </br>
50 <ul>
51 <li><p>Skaffe seg maskin og SSL sertifikat(er)</p></li>
52 <li><p>Bruke Ansible</p></li>
53 <li><p>Opprette administrator-bruker og slette guest-brukeren</p></li>
54 <li><p>Sette rettigheter og opprette entiteter</p></li>
55 </ul>
56 </section>
57 <section>
58 <h2>Ansible</h2>
59 </br>
60 <p>Vi bruker repo <em>UAIT/int-ansible-hosts</em></p>
61 <p>Etter å ha installert Ansible på lokalmaskina gjør vi følgende:</p>
62 <ul>
63 <li><p><small><em>git clone ssh://git@bitbucket.usit.uio.no:7999/uait/int-ansible-hosts.git</em></small></p></li>
64 <li><p><small><em>cd int-ansible-hosts</em></small></p></li>
65 <li><p><small><em>ansible-playbook --ask-become-pass -v --extra-vars '{"hosts": "mq-hostname"}' rabbitmq_playbook.yml</em></small></p></li>
66 </ul>
67 <p>RabbitMQ skal nå være installert og tilgjengelig på <em>https://mq-hostname</em></p>
68 </section>
69
70 <section>
71 <h2>Administrator-bruker</h2>
72 </br>
73 <p>Brukeren <em>guest</em> med passord <em>guest</em> vil eksistere etter at Ansible har kjørt</p>
74 <p>I tillegg til webgrensesnittet, kan en bruke <em>rabbitmqctl</em></p>
75 <ul>
76 <li><p><small><em>rabbitmqctl list_users</em> (Lister alle eksisterende RabbitMQ-brukere)</small></p></li>
77 <li><p><small><em>rabbitmqctl add_user rmq_admin &lt;passord&gt;</em> (Legger til dedikert admin bruker <em>rmq_admin</em>)</small></p></li>
78 <li><p><small><em>rabbitmqctl set_user_tags rmq_admin administrator</em> (Gir administrator rolle til <em>rmq_admin</em>)</small></p></li>
79 <li><p><small><em>rabbitmqctl delete_user guest</em> (Sletter brukeren <em>guest</em>)</small></p></li>
80 </ul>
81 </section>
82
83 <section>
84 <h2><em>vhost</em></h2>
85 </br>
86 <p><em>vhost</em> fungerer som en beholder (container) for RabbitMQ/AMQP objekter. Nok igjen kan en velge mellom webgrensesnitt og <em>rabbitmqctl</em></p>
87 <ul>
88 <li><p><small><em>rabbitmqctl list_vhosts</em> (Lister alle eksisterende vhosts)</small></p></li>
89 <li><p><small><em>rabbitmqctl add_vhost /no/uio/integration</em> (Oppretter <em>vhost</em> med navn <em>/no/uio/integration</em>)</small></p></li>
90 </ul>
91 </section>
92
93 <section>
94 <h2>Rettigheter</h2>
95 <p>RabbitMQ implementerer 2 rettighetsnivåer(*):</p>
96 <ul>
97 <li>Per <em>vhost</em></li>
98 <li>Per entitet</li>
99 </ul>
100 <p>RabbitMQ definerer 3 typer operasjoner:</p>
101 <ul>
102 <li><p><em>configure</em> - opprette / slette entiteter eller endre deres oppførsel</p></li>
103 <li><p><em>write</em> - skrive melding til en entitet</p></li>
104 <li><p><em>read</em> - lese melding fra entitet</p></li>
105 </ul>
106 <p><small>(*) - <em>/etc/rabbitmq/rabbitmq.config</em> gir flere muligheter</small></p>
107 </section>
108
109 <section>
110 <h2>Rettigheter og brukere</h2>
111 <p>RabbitMQ bruker <em>regular expressions</em> til å definere rettigheter</p>
112 <ul>
113 <li><p><small><em>rabbitmqctl add_user cerebrum &lt;passord&gt;</em></small></p></li>
114 <li><p><small><em>rabbitmqctl add_user uio_ad_microservice &lt;passord&gt;</em></small></p></li>
115 <li><p><small><em>rabbitmqctl set_permissions -p /no/uio/integration cerebrum "^$" "^ex_.*" "^$"</em></small></p></li>
116 <li><p><small><em>rabbitmqctl set_permissions -p /no/uio/integration uio_ad_microservice "^q_ad_ms_.*" "^q_ad_ms_.*" "^(ex_messages|q_ad_ms_.*)$"</em></small></p></li>
117 </ul>
118 </section>
119
120 <section>
121 <h2>Køer</h2>
122 <p>Køer defineres som <em>durable</em> ved hjelp av webgrensesnittet.</p>
123 <p>"Alle køer (både forhåndsdefinerte og de som defineres av konsument) må ha navn som starter med <em>q_</em>. Køen vil ha navn som uttryker mottakeren som bruker den."</p>
124 <p>F.eks. <em>q_ad_ms_all</em> vil være et passende navn for køen som brukes av AD-microservice mottakeren.</p>
125 </section>
126
127 <section>
128 <h2><em>Exchange</em></h2>
129 <p>"Avsendere vil vanligvis sende meldinger til exchange <em>ex_messages</em>."</p>
130 <p>Det er flere typer <em>exchange</em>, men vi vil bruke kun <em>topic exchange</em>.</p>
131 </section>
132 </section>
133
134 <section>
135 <section>
136 <h2>Utvikling</h2>
137 </br>
138 <ul>
139 <li><p><em>Routing keys</em> i <em>topic exchange</em></p></li>
140 <li><p>Bindinger</p></li>
141 <li><p>Protokoller og porter</p></li>
142 <li><p>Eksempler</p></li>
143 </ul>
144 </section>
145
146 <section>
147 <h2><em>Routing keys</em> i <em>topic exchange</em></h2>
148 </br>
149 <p><em>Routing key</em> settes av sender som en del av meldingen og blir inspisert av brokeren dersom meldingen sendes til en <em>topic exchange</em>.</p>
150 <p>Strukturen til en topic / message routing key er:</p>
151 <p><small>&lt;kilde&gt;.&lt;type&gt;.&lt;objekt&gt;.&lt;hendelse&gt;</small></p>
152 <p>F.eks.:</p>
153 <p><small>cerebrum.event.person.delete</small></p>
154 </section>
155
156 <section>
157 <h2>Bindinger</h2>
158 <p>For at en melding sendt til en <em>topic exchange</em> skal havne i en bestemt kø, må køen være bundet (<em>bound</em>) til <em>exchange</em>.</p>
159 <p>I <em>topic exchange</em> brukes <em>routing key</em> (<em>topic</em>) til å avgjøre hvilke av meldingene som blir sendt vil havne i køen som er bundet.</p>
160 <p>Dersom vi binder køen <em>q_ad_ms_all</em> til <em>topic exchange</em> <em>ex_messages</em> med <em>binding key</em> <em>cerebrum.event.account.*</em> vil alle meldinger som blir sendt til <em>ex_messages</em> med topic som starter med <em>cerebrum.event.account.</em> havne i <em>q_ad_ms_all</em>.</p>
161 <p>En kø kan bli bundet med én eller flere nøkler til en <em>topic exchange</em>.</p>
162 </section>
163
164 <section>
165 <h2>Protokoller og porter</h2>
166 </br>
167 <p>"AMQP 0.9.1 prioritert siden det er protokollen som mapper best mot RabbitMQs funksjonalitet. Vi har også noe erfaring med bruk av denne."</p>
168 <p>RabbitMQ lytter for AMQP0.9.1 på SSL port <em>5671</em>.</p>
169 </br>
170 <p>Andre protokoller og tjenester for RabbitMQ:</p>
171 <ul>
172 <li>STOMP - 61614 (SSL)</li>
173 <li>RabbitMQ Management (webgrensesnitt) - 15671 (SSL)</li>
174 </ul>
175 </section>
176
177 <section>
178 <h2>Eksempler</h2>
179 </br>
180 <pre>
181 <code class="hljs" data-trim contenteditable>
182 $ pip install pika
183 </code>
184 </pre>
185 <p>Python:</p>
186 <p>"Well, we'll not risk another frontal assault. That rabbit's dynamite...."</p>
187 </section>
188
189 </section>
190
191 <section>
192 <section>
193 <h2>Dokumentasjon og lenker</h2>
194 </br>
195 <p>
196 RabbitMQ:
197 </p>
198 <ul>
199 <li>
200 <p>
201 <small>
202 <a href="http://www.rabbitmq.com">http://www.rabbitmq.com</a> - RabbitMQ sin offisielle side
203 </small>
204 </li>
205 <li>
206 <p>
207 <small>
208 <a href="http://www.rabbitmq.com/configure.html">http://www.rabbitmq.com/configure.html</a> - Generell konfigurasjon av RabbitMQ
209 </small>
210 </li>
211 <li>
212 <p>
213 <small>
214 <a href="http://www.rabbitmq.com/management.html">http://www.rabbitmq.com/management.html</a> - Bruk av rabbitmq_management plugin i RabbitMQ
215 </small>
216 </li>
217 <li>
218 <p>
219 <small>
220 <a href="http://www.rabbitmq.com/access-control.html">http://www.rabbitmq.com/access-control.html</a> - Tilgangskontroll i RabbitMQ
221 </small>
222 </li>
223 <li>
224 <p>
225 <small>
226 <a href="http://www.rabbitmq.com/man/rabbitmqctl.1.man.html">http://www.rabbitmq.com/man/rabbitmqctl.1.man.html</a> - rabbitmqctl manual side
227 </small>
228 </li>
229 <li>
230 <p>
231 <small>
232 <a href="http://www.rabbitmq.com/tutorials/amqp-concepts.html">http://www.rabbitmq.com/tutorials/amqp-concepts.html</a> - Generelt om AMQP og forskjellige exchanges
233 </small>
234 </li>
235 </ul>
236 </section>
237 <section>
238 <h2>Dokumentasjon og lenker</h2>
239 <p>
240 UiO:
241 </p>
242 <ul>
243 <li>
244 <p>
245 <small>
246 <a href="http://www.usit.uio.no/om/tjenestegrupper/cerebrum/utvikling/dokumentasjon/tools/rabbitmq.html">Installasjon og oppsett av RabbitMQ for Cerebrum utviklere</a>
247 </small>
248 </li>
249 <li>
250 <p>
251 <small>
252 <a href="http://www.usit.uio.no/om/tjenestegrupper/cerebrum/utvikling/aktiviteter/office365-uia/broker/rabbitmq.html">Oppsett av RabbitMQ for Office365 integrasjon mot UiA</a>
253 </small>
254 </li>
255 <li>
256 <p>
257 <small>
258 <a href="https://www.usit.uio.no/om/organisasjon/uav/usitint/interndokumentasjon/integrasjon/broker/utredning-meldingsflyt.html">Utredning: Meldingsflyt, kø-struktur og navngiving</a> (intern)
259 </small>
260 </li>
261 </ul>
262 <p>
263 Bøker:
264 </p>
265 <ul>
266 <li>
267 <p>
268 <small>
269 RabbitMQ in action - Alvaro Videla / Jason J.W. Williams - 2012 - Manning
270 </small>
271 </li>
272 <li>
273 <p>
274 <small>
275 Mastering RabbitMQ - Ayanoglu / Aytas / Nahum - 2015 - PACKT Publishing
276 </small>
277 </li>
278 </section>
279 </section>
280
281 <section>
282 <h1>Q&A</h1>
283 </section>
284
285 </div>
286 </div>
287
288 <script src="dist/reveal.js"></script>
289 <script src="plugin/zoom/zoom.js"></script>
290 <script src="plugin/notes/notes.js"></script>
291 <script src="plugin/search/search.js"></script>
292 <script src="plugin/markdown/markdown.js"></script>
293 <script src="plugin/highlight/highlight.js"></script>
294 <script>
295
296 // Also available as an ES module, see:
297 // https://revealjs.com/initialization/
298 Reveal.initialize({
299 controls: true,
300 progress: true,
301 center: true,
302 hash: true,
303
304 // Learn about plugins: https://revealjs.com/plugins/
305 plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
306 });
307
308 </script>
309
310 </body>
311</html>