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.html528
1 files changed, 264 insertions, 264 deletions
diff --git a/reveal.js/rabbitmq.html b/reveal.js/rabbitmq.html
index ed1cbfd..6d1ba7a 100644
--- a/reveal.js/rabbitmq.html
+++ b/reveal.js/rabbitmq.html
@@ -1,311 +1,311 @@
1<!doctype html> 1<!doctype html>
2<html lang="en"> 2<html lang="en">
3 <head> 3 <head>
4 <meta charset="utf-8"> 4 <meta charset="utf-8">
5 <title>RabbitMQ - Intern opplæring</title> 5 <title>RabbitMQ - Intern opplæring</title>
6 <meta name="author" content="Simeon Simeonov"> 6 <meta name="author" content="Simeon Simeonov">
7 <meta name="apple-mobile-web-app-capable" content="yes"> 7 <meta name="apple-mobile-web-app-capable" content="yes">
8 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 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"> 9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10 10
11 <link rel="stylesheet" href="dist/reset.css"> 11 <link rel="stylesheet" href="dist/reset.css">
12 <link rel="stylesheet" href="dist/reveal.css"> 12 <link rel="stylesheet" href="dist/reveal.css">
13 13
14 <link rel="stylesheet" href="dist/theme/serif.css" id="theme"> 14 <link rel="stylesheet" href="dist/theme/serif.css" id="theme">
15 15
16 <!-- Theme used for syntax highlighting of code --> 16 <!-- Theme used for syntax highlighting of code -->
17 <link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme"> 17 <link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
18 </head> 18 </head>
19 <body> 19 <body>
20 <div class="reveal"> 20 <div class="reveal">
21 21
22 <!-- Any section element inside of this container is displayed as a slide --> 22 <!-- Any section element inside of this container is displayed as a slide -->
23 <div class="slides"> 23 <div class="slides">
24 <section> 24 <section>
25 <h1>RabbitMQ</h1> 25 <h1>RabbitMQ</h1>
26 <h3>Intern opplæring</h3> 26 <h3>Intern opplæring</h3>
27 </br> 27 </br>
28 <p> 28 <p>
29 <small>Simeon Simeonov</small> 29 <small>Simeon Simeonov</small>
30 </p> 30 </p>
31 </section> 31 </section>
32 32
33 <section> 33 <section>
34 <section id="fragments"> 34 <section id="fragments">
35 <h2>Agenda</h2> 35 <h2>Agenda</h2>
36 </br> 36 </br>
37 <ul> 37 <ul>
38 <span class="fragment"><li>Installasjon</li></span> 38 <span class="fragment"><li>Installasjon</li></span>
39 <span class="fragment"><li>Administrasjon</li></span> 39 <span class="fragment"><li>Administrasjon</li></span>
40 <span class="fragment"><li>Utvikling</li></span> 40 <span class="fragment"><li>Utvikling</li></span>
41 <span class="fragment"><li>Diverse + Q&A</li></span> 41 <span class="fragment"><li>Diverse + Q&A</li></span>
42 </ul> 42 </ul>
43 </section> 43 </section>
44 </section> 44 </section>
45 45
46 <section> 46 <section>
47 <section> 47 <section>
48 <h2>Installasjon og oppsett</h2> 48 <h2>Installasjon og oppsett</h2>
49 </br> 49 </br>
50 <ul> 50 <ul>
51 <li><p>Skaffe seg maskin og SSL sertifikat(er)</p></li> 51 <li><p>Skaffe seg maskin og SSL sertifikat(er)</p></li>
52 <li><p>Bruke Ansible</p></li> 52 <li><p>Bruke Ansible</p></li>
53 <li><p>Opprette administrator-bruker og slette guest-brukeren</p></li> 53 <li><p>Opprette administrator-bruker og slette guest-brukeren</p></li>
54 <li><p>Sette rettigheter og opprette entiteter</p></li> 54 <li><p>Sette rettigheter og opprette entiteter</p></li>
55 </ul> 55 </ul>
56 </section> 56 </section>
57 <section> 57 <section>
58 <h2>Ansible</h2> 58 <h2>Ansible</h2>
59 </br> 59 </br>
60 <p>Vi bruker repo <em>UAIT/int-ansible-hosts</em></p> 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> 61 <p>Etter å ha installert Ansible på lokalmaskina gjør vi følgende:</p>
62 <ul> 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> 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> 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> 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> 66 </ul>
67 <p>RabbitMQ skal nå være installert og tilgjengelig på <em>https://mq-hostname</em></p> 67 <p>RabbitMQ skal nå være installert og tilgjengelig på <em>https://mq-hostname</em></p>
68 </section> 68 </section>
69 69
70 <section> 70 <section>
71 <h2>Administrator-bruker</h2> 71 <h2>Administrator-bruker</h2>
72 </br> 72 </br>
73 <p>Brukeren <em>guest</em> med passord <em>guest</em> vil eksistere etter at Ansible har kjørt</p> 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> 74 <p>I tillegg til webgrensesnittet, kan en bruke <em>rabbitmqctl</em></p>
75 <ul> 75 <ul>
76 <li><p><small><em>rabbitmqctl list_users</em> (Lister alle eksisterende RabbitMQ-brukere)</small></p></li> 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> 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> 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> 79 <li><p><small><em>rabbitmqctl delete_user guest</em> (Sletter brukeren <em>guest</em>)</small></p></li>
80 </ul> 80 </ul>
81 </section> 81 </section>
82 82
83 <section> 83 <section>
84 <h2><em>vhost</em></h2> 84 <h2><em>vhost</em></h2>
85 </br> 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> 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> 87 <ul>
88 <li><p><small><em>rabbitmqctl list_vhosts</em> (Lister alle eksisterende vhosts)</small></p></li> 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> 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> 90 </ul>
91 </section> 91 </section>
92 92
93 <section> 93 <section>
94 <h2>Rettigheter</h2> 94 <h2>Rettigheter</h2>
95 <p>RabbitMQ implementerer 2 rettighetsnivåer(*):</p> 95 <p>RabbitMQ implementerer 2 rettighetsnivåer(*):</p>
96 <ul> 96 <ul>
97 <li>Per <em>vhost</em></li> 97 <li>Per <em>vhost</em></li>
98 <li>Per entitet</li> 98 <li>Per entitet</li>
99 </ul> 99 </ul>
100 <p>RabbitMQ definerer 3 typer operasjoner:</p> 100 <p>RabbitMQ definerer 3 typer operasjoner:</p>
101 <ul> 101 <ul>
102 <li><p><em>configure</em> - opprette / slette entiteter eller endre deres oppførsel</p></li> 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> 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> 104 <li><p><em>read</em> - lese melding fra entitet</p></li>
105 </ul> 105 </ul>
106 <p><small>(*) - <em>/etc/rabbitmq/rabbitmq.config</em> gir flere muligheter</small></p> 106 <p><small>(*) - <em>/etc/rabbitmq/rabbitmq.config</em> gir flere muligheter</small></p>
107 </section> 107 </section>
108 108
109 <section> 109 <section>
110 <h2>Rettigheter og brukere</h2> 110 <h2>Rettigheter og brukere</h2>
111 <p>RabbitMQ bruker <em>regular expressions</em> til å definere rettigheter</p> 111 <p>RabbitMQ bruker <em>regular expressions</em> til å definere rettigheter</p>
112 <ul> 112 <ul>
113 <li><p><small><em>rabbitmqctl add_user cerebrum &lt;passord&gt;</em></small></p></li> 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> 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> 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> 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> 117 </ul>
118 </section> 118 </section>
119 119
120 <section> 120 <section>
121 <h2>Køer</h2> 121 <h2>Køer</h2>
122 <p>Køer defineres som <em>durable</em> ved hjelp av webgrensesnittet.</p> 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> 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> 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> 125 </section>
126 126
127 <section> 127 <section>
128 <h2><em>Exchange</em></h2> 128 <h2><em>Exchange</em></h2>
129 <p>"Avsendere vil vanligvis sende meldinger til exchange <em>ex_messages</em>."</p> 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> 130 <p>Det er flere typer <em>exchange</em>, men vi vil bruke kun <em>topic exchange</em>.</p>
131 </section> 131 </section>
132 </section> 132 </section>
133 133
134 <section> 134 <section>
135 <section> 135 <section>
136 <h2>Utvikling</h2> 136 <h2>Utvikling</h2>
137 </br> 137 </br>
138 <ul> 138 <ul>
139 <li><p><em>Routing keys</em> i <em>topic exchange</em></p></li> 139 <li><p><em>Routing keys</em> i <em>topic exchange</em></p></li>
140 <li><p>Bindinger</p></li> 140 <li><p>Bindinger</p></li>
141 <li><p>Protokoller og porter</p></li> 141 <li><p>Protokoller og porter</p></li>
142 <li><p>Eksempler</p></li> 142 <li><p>Eksempler</p></li>
143 </ul> 143 </ul>
144 </section> 144 </section>
145 145
146 <section> 146 <section>
147 <h2><em>Routing keys</em> i <em>topic exchange</em></h2> 147 <h2><em>Routing keys</em> i <em>topic exchange</em></h2>
148 </br> 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> 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> 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> 151 <p><small>&lt;kilde&gt;.&lt;type&gt;.&lt;objekt&gt;.&lt;hendelse&gt;</small></p>
152 <p>F.eks.:</p> 152 <p>F.eks.:</p>
153 <p><small>cerebrum.event.person.delete</small></p> 153 <p><small>cerebrum.event.person.delete</small></p>
154 </section> 154 </section>
155 155
156 <section> 156 <section>
157 <h2>Bindinger</h2> 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> 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> 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> 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> 161 <p>En kø kan bli bundet med én eller flere nøkler til en <em>topic exchange</em>.</p>
162 </section> 162 </section>
163 163
164 <section> 164 <section>
165 <h2>Protokoller og porter</h2> 165 <h2>Protokoller og porter</h2>
166 </br> 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> 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> 168 <p>RabbitMQ lytter for AMQP0.9.1 på SSL port <em>5671</em>.</p>
169 </br> 169 </br>
170 <p>Andre protokoller og tjenester for RabbitMQ:</p> 170 <p>Andre protokoller og tjenester for RabbitMQ:</p>
171 <ul> 171 <ul>
172 <li>STOMP - 61614 (SSL)</li> 172 <li>STOMP - 61614 (SSL)</li>
173 <li>RabbitMQ Management (webgrensesnitt) - 15671 (SSL)</li> 173 <li>RabbitMQ Management (webgrensesnitt) - 15671 (SSL)</li>
174 </ul> 174 </ul>
175 </section> 175 </section>
176 176
177 <section> 177 <section>
178 <h2>Eksempler</h2> 178 <h2>Eksempler</h2>
179 </br> 179 </br>
180 <pre> 180 <pre>
181 <code class="hljs" data-trim contenteditable> 181 <code class="hljs" data-trim contenteditable>
182 $ pip install pika 182 $ pip install pika
183 </code> 183 </code>
184 </pre> 184 </pre>
185 <p>Python:</p> 185 <p>Python:</p>
186 <p>"Well, we'll not risk another frontal assault. That rabbit's dynamite...."</p> 186 <p>"Well, we'll not risk another frontal assault. That rabbit's dynamite...."</p>
187 </section> 187 </section>
188 188
189 </section> 189 </section>
190 190
191 <section> 191 <section>
192 <section> 192 <section>
193 <h2>Dokumentasjon og lenker</h2> 193 <h2>Dokumentasjon og lenker</h2>
194 </br> 194 </br>
195 <p> 195 <p>
196 RabbitMQ: 196 RabbitMQ:
197 </p> 197 </p>
198 <ul> 198 <ul>
199 <li> 199 <li>
200 <p> 200 <p>
201 <small> 201 <small>
202 <a href="http://www.rabbitmq.com">http://www.rabbitmq.com</a> - RabbitMQ sin offisielle side 202 <a href="http://www.rabbitmq.com">http://www.rabbitmq.com</a> - RabbitMQ sin offisielle side
203 </small> 203 </small>
204 </li> 204 </li>
205 <li> 205 <li>
206 <p> 206 <p>
207 <small> 207 <small>
208 <a href="http://www.rabbitmq.com/configure.html">http://www.rabbitmq.com/configure.html</a> - Generell konfigurasjon av RabbitMQ 208 <a href="http://www.rabbitmq.com/configure.html">http://www.rabbitmq.com/configure.html</a> - Generell konfigurasjon av RabbitMQ
209 </small> 209 </small>
210 </li> 210 </li>
211 <li> 211 <li>
212 <p> 212 <p>
213 <small> 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 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> 215 </small>
216 </li> 216 </li>
217 <li> 217 <li>
218 <p> 218 <p>
219 <small> 219 <small>
220 <a href="http://www.rabbitmq.com/access-control.html">http://www.rabbitmq.com/access-control.html</a> - Tilgangskontroll i RabbitMQ 220 <a href="http://www.rabbitmq.com/access-control.html">http://www.rabbitmq.com/access-control.html</a> - Tilgangskontroll i RabbitMQ
221 </small> 221 </small>
222 </li> 222 </li>
223 <li> 223 <li>
224 <p> 224 <p>
225 <small> 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 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> 227 </small>
228 </li> 228 </li>
229 <li> 229 <li>
230 <p> 230 <p>
231 <small> 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 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> 233 </small>
234 </li> 234 </li>
235 </ul> 235 </ul>
236 </section> 236 </section>
237 <section> 237 <section>
238 <h2>Dokumentasjon og lenker</h2> 238 <h2>Dokumentasjon og lenker</h2>
239 <p> 239 <p>
240 UiO: 240 UiO:
241 </p> 241 </p>
242 <ul> 242 <ul>
243 <li> 243 <li>
244 <p> 244 <p>
245 <small> 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> 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> 247 </small>
248 </li> 248 </li>
249 <li> 249 <li>
250 <p> 250 <p>
251 <small> 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> 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> 253 </small>
254 </li> 254 </li>
255 <li> 255 <li>
256 <p> 256 <p>
257 <small> 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) 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> 259 </small>
260 </li> 260 </li>
261 </ul> 261 </ul>
262 <p> 262 <p>
263 Bøker: 263 Bøker:
264 </p> 264 </p>
265 <ul> 265 <ul>
266 <li> 266 <li>
267 <p> 267 <p>
268 <small> 268 <small>
269 RabbitMQ in action - Alvaro Videla / Jason J.W. Williams - 2012 - Manning 269 RabbitMQ in action - Alvaro Videla / Jason J.W. Williams - 2012 - Manning
270 </small> 270 </small>
271 </li> 271 </li>
272 <li> 272 <li>
273 <p> 273 <p>
274 <small> 274 <small>
275 Mastering RabbitMQ - Ayanoglu / Aytas / Nahum - 2015 - PACKT Publishing 275 Mastering RabbitMQ - Ayanoglu / Aytas / Nahum - 2015 - PACKT Publishing
276 </small> 276 </small>
277 </li> 277 </li>
278 </section> 278 </section>
279 </section> 279 </section>
280
281 <section>
282 <h1>Q&A</h1>
283 </section>
284
285 </div>
286 </div>
280 287
281 <section> 288 <script src="dist/reveal.js"></script>
282 <h1>Q&A</h1> 289 <script src="plugin/zoom/zoom.js"></script>
283 </section> 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>
284 295
285 </div> 296 // Also available as an ES module, see:
286 </div> 297 // https://revealjs.com/initialization/
287 298 Reveal.initialize({
288 <script src="dist/reveal.js"></script> 299 controls: true,
289 <script src="plugin/zoom/zoom.js"></script> 300 progress: true,
290 <script src="plugin/notes/notes.js"></script> 301 center: true,
291 <script src="plugin/search/search.js"></script> 302 hash: true,
292 <script src="plugin/markdown/markdown.js"></script>
293 <script src="plugin/highlight/highlight.js"></script>
294 <script>
295 303
296 // Also available as an ES module, see: 304 // Learn about plugins: https://revealjs.com/plugins/
297 // https://revealjs.netlify.app/initialization/ 305 plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
298 Reveal.initialize({ 306 });
299 controls: true,
300 progress: true,
301 center: true,
302 hash: true,
303 307
304 // Learn about plugins: https://revealjs.netlify.app/plugins/ 308 </script>
305 plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
306 });
307
308 </script>
309 309
310 </body> 310 </body>
311</html> 311</html>