diff options
Diffstat (limited to 'reveal.js/rabbitmq.html')
| -rw-r--r-- | reveal.js/rabbitmq.html | 311 |
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 <passord></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 <passord></em></small></p></li> | ||
| 114 | <li><p><small><em>rabbitmqctl add_user uio_ad_microservice <passord></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><kilde>.<type>.<objekt>.<hendelse></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> | ||
