Jarný cloudový autobus

1. Prehľad

V tomto článku sa pozrieme na nový projekt Spring Cloud Bus. Spring Cloud Bus používa na prepojenie uzlov distribuovaného systému ľahkého sprostredkovateľa správ. Primárne sa používa na vysielanie zmien konfigurácie alebo iných informácií o správe. Môžeme o tom uvažovať ako o distribuovanom Aktuátore.

Projekt využíva na prepravu sprostredkovateľa AMQP, ale namiesto RabbitMQ je možné využiť Apache Kafka alebo Redis. Ostatné prepravy zatiaľ nie sú podporované.

V priebehu tohto tutoriálu budeme používať RabbitMQ ako náš hlavný transport - ktorý už samozrejme budeme mať spustený.

2. Predpoklady

Predtým, ako začneme, sa odporúča absolvovať už „Rýchly úvod do konfigurácie Spring Cloud“. Zoberieme si existujúci cloudový konfiguračný server a klienta, aby sme ich rozšírili a pridali automatické upozornenia na zmeny konfigurácie.

2.1. RabbitMQ

Začnime s RabbitMQ, ktorý odporúčame spustiť ako RabbitMQ ako obrázok ukotvenia. Toto je celkom jednoduché nastaviť - aby sme RabbitMQ spustili lokálne, musíme si nainštalovať Docker a po úspešnej inštalácii Dockeru spustiť nasledujúce príkazy:

docker pull rabbitmq: 3-management

Tento príkaz stiahne obraz ukotvenia RabbitMQ spolu s nainštalovaným a predvolene povoleným doplnkom na správu.

Ďalej môžeme spustiť RabbitMQ:

docker run -d --hostname my-rabbit --name some-rabbit -p 15672: 15672 -p 5672: 5672 rabbitmq: 3-management

Po vykonaní príkazu môžeme prejsť do webového prehliadača a otvoriť // localhost: 15672, kde sa zobrazí prihlasovací formulár konzoly pre správu. Predvolené používateľské meno je: 'hosť'; heslo: 'hosť'. RabbitMQ bude tiež počúvať na porte 5672.

3. Pridanie aktuátora do klienta Cloud Config

Mali by sme mať spustený cloudový konfiguračný server aj cloudového konfiguračného klienta. Na obnovenie zmien konfigurácie je potrebné zakaždým reštartovať klienta - čo nie je ideálne.

Zastavme konfiguračného klienta a urobme anotáciu ConfigClient trieda kontrolóra s @RefreshScope:

@SpringBootApplication @RestController @RefreshScope verejná trieda SpringCloudConfigClientApplication {// Kód tu ...}

Nakoniec aktualizujme pom.xml súbor a pridať aktuátor:

 org.springframework.boot Spring-Boot-Actuator 2.2.6. UVOĽNENIE 

Najnovšiu verziu nájdete tu.

Štandardne sú všetky citlivé koncové body pridané aktuátorom zabezpečené. Toto zahŕňa '/Obnoviť' koncový bod. Pre zjednodušenie vypneme zabezpečenie aktualizáciou bootstrap.properties:

management.security.enabled = false

Počnúc programom Spring Boot 2 navyše nie sú predvolene vystavené koncové body ovládačov. Aby sme ich sprístupnili pre prístup, musíme to pridať v aplikácia.yml:

správa: koncové body: web: expozícia: zahrnúť: "*"

Najprv začnime klienta a aktualizujeme rolu používateľa z existujúcej „Vývojár“ do „Programátor“ v súbore vlastností na GitHub. Server konfigurácie okamžite zobrazí aktualizované hodnoty; klient však nebude. Aby klient mohol vidieť nové súbory, musíme jednoducho poslať prázdnu požiadavku POST na '/Obnoviť' koncový bod, ktorý bol pridaný aktuátorom:

$> curl -X POST // localhost: 8080 / aktuátor / obnovenie

Dostaneme späť súbor JSON zobrazujúci aktualizované vlastnosti:

["user.role"]

Na záver môžeme skontrolovať, či bola aktualizovaná rola používateľa:

$> curl // localhost: 8080 / whoami / Mr_Pink Dobrý deň, Mr_Pink! Ste (n) programátor a vaše heslo je „d3v3L“.

Rola používateľa bola úspešne aktualizovaná a zavolaním '/Obnoviť' koncový bod. Klientom aktualizovaná konfigurácia bez reštartovania.

4. Jarný cloudový autobus

Použitím aktuátora môžeme osviežiť klientov. V prostredí cloudu by sme však museli prejsť na každého jedného klienta a znova načítať konfiguráciu pomocou prístupu ku koncovému bodu aktuátora.

Na vyriešenie tohto problému môžeme použiť Spring Cloud Bus.

4.1. Zákazník

Potrebujeme aktualizovať cloudového konfiguračného klienta, aby sa mohol prihlásiť na výmenu servera RabbitMQ:

 org.springframework.cloud spring-cloud-starter-bus-amqp 2.2.1.RELEASE 

Najnovšiu verziu nájdete tu.

Ak chcete dokončiť zmeny konfiguračného klienta, musíme pridať podrobnosti RabbitMQ a povoliť cloudovú zbernicu v aplikácia.yml spis:

--- jar: rabbitmq: hostiteľ: port localhost: 5672 používateľské meno: heslo hosťa: cloud hosťa: autobus: povolený: true obnovenie: povolený: true 

Upozorňujeme, že používame predvolené používateľské meno a heslo. Toto je potrebné aktualizovať pre skutočné, produkčné aplikácie. Pre tento návod je to v poriadku.

Teraz bude mať klient ďalší koncový bod „/ Bus-refresh“. Volanie tohto koncového bodu spôsobí:

  • získať najnovšiu konfiguráciu z konfiguračného servera a aktualizovať jeho konfiguráciu s poznámkami @RefreshScope
  • poslať správu na burzu AMQP informujúcu o udalosti obnovenia
  • všetky prihlásené uzly tiež aktualizujú svoju konfiguráciu

Týmto spôsobom nemusíme chodiť do jednotlivých uzlov a spúšťať aktualizáciu konfigurácie.

4.2. Server

Na záver pridajme na konfiguračný server dve závislosti, aby sme mohli plne automatizovať zmeny konfigurácie.

 org.springframework.cloud spring-cloud-config-monitor 2.2.2.RELEASE 

Najnovšiu verziu nájdete tu.

 org.springframework.cloud spring-cloud-starter-stream-rabbit 3.0.4.RELEASE 

Najnovšiu verziu nájdete tu.

Použijeme spring-cloud-config-monitor na sledovanie zmien konfigurácie a vysielanie udalostí pomocou prenosu RabbitMQ.

Potrebujeme iba aktualizáciu application.properties a daj RabbitMQ podrobnosti:

spring.rabbitmq.host = localhost spring.rabbitmq.port = 5672 spring.rabbitmq.username = hosť spring.rabbitmq.password = hosť

4.3. GitHub Webhook

Všetko je teraz nastavené. Keď bude server informovaný o zmenách konfigurácie, odošle to ako správu pre RabbitMQ. Po prenose udalosti zmeny konfigurácie bude klient počúvať správy a aktualizovať svoju konfiguráciu. Ako však bude server teraz s touto úpravou?

Musíme nakonfigurovať GitHub Webhook. Poďme na GitHub a otvorme si svoje úložisko obsahujúce vlastnosti konfigurácie. Teraz vyberieme nastavenie a Webhook. Klikneme na Pridajte webhook tlačidlo.

URL užitočného zaťaženia je adresa URL nášho konfiguračného servera „/ Monitor“ koncový bod. V našom prípade bude adresa URL asi takáto:

// root: [chránený e-mailom] _IP: 8888 / monitor

Musíme sa len zmeniť Druh obsahu v rozbaľovacej ponuke na aplikácia / json. Ďalej prosím odíďte Tajomstvo prázdne a kliknite na Pridajte webhook tlačidlo - potom sme všetci nastavení.

5. Testovanie

Uistite sa, že sú spustené všetky aplikácie. Ak sa vrátime a skontrolujeme klienta, ukáže sa to user.role ako „Programátor“ a pouzivatelske heslo ako „d3v3L‘:

$> curl // localhost: 8080 / whoami / Mr_Pink Dobrý deň, Mr_Pink! Ste (n) programátor a vaše heslo je „d3v3L“.

Predtým sme museli použiť '/Obnoviť' koncový bod na opätovné načítanie zmien konfigurácie. Poďme otvoriť súbor vlastností, zmeniť user.role späť k Vývojár a presuňte zmeny:

user.role = Programátor

Ak teraz klienta skontrolujeme, uvidíme:

$> curl // localhost: 8080 / whoami / Mr_Pink Dobrý deň, Mr_Pink! Ste (n) vývojár a vaše heslo je „d3v3L“.

Klient Config aktualizoval svoju konfiguráciu bez reštartu a bez explicitného obnovenia takmer súčasne. Môžeme sa vrátiť späť na GitHub a otvoriť nedávno vytvorený Webhook. Úplne dole sú Posledné dodávky. Môžeme vybrať jeden v hornej časti zoznamu (za predpokladu, že išlo o prvú zmenu - aj tak bude iba jedna) a preskúmať JSON, ktorý bol odoslaný na konfiguračný server.

Môžeme tiež skontrolovať protokoly konfigurácie a servera a uvidíme položky:

o.s.cloud.bus.event.RefreshListener: Prijatá žiadosť o vzdialené obnovenie. Kľúče boli obnovené []

6. Záver

V tomto článku sme vzali existujúci jarný cloudový konfiguračný server a klienta a pridali sme koncový bod aktuátora na aktualizáciu konfigurácie klienta. Ďalej sme pomocou Spring Cloud Bus vysielali zmeny konfigurácie a automatizovali aktualizácie klientov. Tiež sme nakonfigurovali GitHub Webhook a otestovali sme celé nastavenie.

Kód použitý počas diskusie nájdete ako vždy na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found