Hotel Introvert sa rozhodol zaviesť automatickú tarifikáciu pre svojich samotárskych hostí, aby sa minimalizovala interakcia hostí s personálom.

Hostia do tohto hotela prichádzajú a odchádzajú priebežne. Pri odchode sú automaticky tarifikovaní a je im vystavená faktúra poskytnutých služieb. Pre testovacie účely budeme predpokladať, že jedna sekunda v simulácii fungovania hotela bude predstavovať 1 hodinu v tomto hoteli. Hotel má kapacitu 10 hostí, každá izba je jednoposteľová.
Generátor udalostí 1: Každú sekundu simulácie vojde do hotela nový záujemca (vždy len jeden) a ubytuje sa, ak je kapacita dostatočná – vypíše sa dátum a čas príchodu a meno hosťa. Ak sa nevie ubytovať, vypíše sa hláška o plnej kapacite a záujemca o ubytovanie odchádza.
Generátor udalostí 2: Každú sekundu simulácie sa vyberie náhodný ubytovaný hosť a s pravdepodobnosťou p% (p – vstupný parameter simulácie) opúšťa hotel. Pre jednoduchosť izba je okamžite k dispozícii ďalšiemu hosťovi, ktorý príde neskôr.
Generátor udalostí 3: Vždy o 7:00, 12:00 a 18:00 kuchyňa vyhlasuje raňajky/obed/večeru.

Prvé dva generátory sa spúšťajú dvakrát (nezávisle spustené procesy alebo vlákna), tretí je iba jeden.

Systém ma podporovať nasledovné služby:

  1. Ak nastane udalosť kuchyne, systém vypíše meno jedla a počet aktuálne ubytovaných hostí, teda počet vydaných jedál (samozrejme každý hosť sa stravuje sám na izbe).
  2. Keď hosť opúšťa hotel, vypíše sa jeho dátum a čas príchodu aj odchodu, počet absolvovaných raňajok, obedov, večerí a nocľahov a celková cena popytu. Nocľah sa ráta vždy ak bol hosť v hoteli aspoň chvíľku medzi 22:00 a 6:00 (aj keď prišiel o 5:00 ráno, ráta sa mu prvá noc). Každá strava aj noc stoja po 10 eur.
  3. Pri ubytovaní nového hosťa aj pri opustení hotela hosťom sa vypíše zoznam voľných izieb.
Technické požiadavky
  • Vyberte si jeden broker — buď RabbitMQ alebo Kafka.
  • Hosť má meno podľa čísla izby, v ktorej je ubytovaný, napr Izba 8. Hotel má izby Izba 0 až Izba 9.
  • Implementáciu databázy ubytovaných zvoľte podľa vlastného uváženia. Nezabúdajte na to, že ku databáze budú pristupovať viacerí klienti naraz. Nemusí to byť relačná databáza, pokojne aj nejaká/é zdieľaná/é pamäťová/é štruktúra/y.
  • Jednotlivé výpisy do konzoly môžu robiť ako producenti, tak aj konzumenti dát, je to na vás. Výpisy nemusia smerovať do rovnakej konzoly.
  • Ak máte potrebu môžete si vyrobiť aj 4. generátor udalostí – hodiny.