Proljetni autobus u oblaku

1. Pregled

U ovom ćemo članku pogledati novi projekt Spring Cloud Bus. Spring Cloud Bus koristi laganog posrednika poruka za povezivanje distribuiranih čvorova sustava. Primarna upotreba je emitiranje promjena konfiguracije ili drugih podataka o upravljanju. O tome možemo razmišljati kao o distribuiranom aktuatoru.

Projekt koristi AMQP brokera kao prijevoz, ali Apache Kafka ili Redis mogu se koristiti umjesto RabbitMQ. Ostali prijevozi još nisu podržani.

Tijekom ovog tutorijala koristit ćemo RabbitMQ kao glavni prijevoz - koji ćemo već prirodno pokretati.

2. Preduvjeti

Prije nego što započnemo, preporučuje se da ste već završili "Brzi uvod u proljetnu konfiguraciju oblaka". Uzeti ćemo postojeći poslužitelj za konfiguriranje u oblaku i klijent kako bismo ih proširili i dodali automatske obavijesti o promjenama konfiguracije.

2.1. RabbitMQ

Počnimo s RabbitMQ, koji preporučujemo kao RabbitMQ kao docker sliku. Ovo je vrlo jednostavno postaviti - da bismo pokrenuli RabbitMQ lokalno, moramo instalirati Docker i pokrenuti sljedeće naredbe nakon što se Docker uspješno instalira:

docker pull rabbitmq: 3-upravljanje

Ova naredba povlači sliku dockera RabbitMQ zajedno s dodatkom za upravljanje koji je instaliran i omogućen prema zadanim postavkama.

Dalje, možemo pokrenuti RabbitMQ:

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

Nakon što izvršimo naredbu, možemo prijeći na web preglednik i otvoriti // localhost: 15672, koji će prikazati obrazac za prijavu na upravljačku konzolu. Zadano korisničko ime je: 'gost'; zaporka: 'gost'. RabbitMQ će također slušati na priključku 5672.

3. Dodavanje aktuatora klijentu Cloud Config

Trebali bismo imati pokrenut poslužitelj za konfiguraciju oblaka i klijent za konfiguriranje u oblaku. Za osvježavanje promjena konfiguracije potrebno je ponovno pokretanje klijenta svaki put - što nije idealno.

Zaustavimo konfiguracijski klijent i bilježimo ConfigClient klasa kontrolera sa @RefreshScope:

@SpringBootApplication @RestController @RefreshScope javna klasa SpringCloudConfigClientApplication {// Kod ovdje ...}

Napokon, ažurirajmo pom.xml datoteku i dodajte aktuator:

 org.springframework.boot spring-boot-actuator 2.2.6.OSLOBODI 

Najnoviju verziju možete pronaći ovdje.

Prema zadanim postavkama osigurane su sve osjetljive krajnje točke koje je dodao pogon. Ovo uključuje '/osvježiti' krajnja točka. Radi jednostavnosti isključit ćemo sigurnost ažuriranjem bootstrap.svojstva:

management.security.enabled = false

Uz to, počevši od Spring Boot 2, krajnje točke aktuatora nisu prema zadanim postavkama izložene. Da bismo ih učinili dostupnima za pristup, moramo to dodati u primjena.iml:

upravljanje: krajnje točke: web: izloženost: uključuju: "*"

Prvo pokrenimo klijenta i ažurirajmo korisničku ulogu s postojeće 'Razvojni programer' do 'Programer' u datoteci svojstava na GitHubu. Config poslužitelj će odmah prikazati ažurirane vrijednosti; međutim, klijent neće. Da bi klijent mogao vidjeti nove datoteke, samo mu moramo poslati prazan POST zahtjev '/osvježiti' krajnja točka, koju je dodao pokretač:

$> curl -X POST // localhost: 8080 / aktuator / osvježi

Vratit ćemo JSON datoteku koja prikazuje ažurirana svojstva:

[ "Korisnička uloga" ]

Konačno, možemo provjeriti je li ažurirana korisnička uloga:

$> curl // localhost: 8080 / whoami / Mr_Pink Pozdrav Mr_Pink! Vi ste (n) programer i vaša lozinka je 'd3v3L'.

Uloga korisnika je uspješno ažurirana i pozivanjem '/osvježiti' krajnja točka. Klijent je ažurirao konfiguraciju bez ponovnog pokretanja.

4. Proljetni oblačni autobus

Korištenjem Actuatora možemo osvježiti klijente. Međutim, u oblačnom okruženju trebali bismo ići na svakog pojedinog klijenta i ponovno učitati konfiguraciju pristupanjem krajnjoj točki aktuatora.

Da bismo riješili ovaj problem, možemo koristiti Spring Cloud Bus.

4.1. Klijent

Moramo ažurirati klijent za konfiguraciju oblaka kako bi se mogao pretplatiti na RabbitMQ razmjenu:

 org.springframework.cloud proljeće-oblak-starter-sabirnica-amqp 2.2.1.OBLAŽENJE 

Najnoviju verziju možete pronaći ovdje.

Da bismo dovršili promjene konfiguracijskog klijenta, moramo dodati detalje RabbitMQ i omogućiti sabirnicu oblaka u primjena.iml datoteka:

--- proljeće: rabbitmq: host: localhost port: 5672 korisničko ime: lozinka za goste: oblak za goste: sabirnica: omogućeno: istinsko osvježavanje: omogućeno: istina 

Napominjemo da koristimo zadano korisničko ime i lozinku. To treba ažurirati za stvarni život, proizvodne aplikacije. Za ovaj tutorial ovo je u redu.

Sada će klijent imati drugu krajnju točku ‘/ Autobus-osvježi’. Pozivanje ove krajnje točke uzrokovat će:

  • preuzmite najnoviju konfiguraciju s konfiguracijskog poslužitelja i ažurirajte njezinu konfiguraciju označenu s @RefreshScope
  • poslati poruku na AMQP razmjenu s informacijama o događaju osvježavanja
  • svi pretplaćeni čvorovi također će ažurirati svoju konfiguraciju

Na taj način ne trebamo ići na pojedinačne čvorove i pokretati ažuriranje konfiguracije.

4.2. Poslužitelj

Konačno, dodajmo dvije ovisnosti na config server kako bismo u potpunosti automatizirali promjene konfiguracije.

 org.springframework.cloud spring-cloud-config-monitor 2.2.2.OSLOBOĐENJE 

Najnoviju verziju možete pronaći ovdje.

 org.springframework.cloud proljeće-oblak-starter-tok-zec 3.0.4.OBLAŽENJE 

Najnoviju verziju možete pronaći ovdje.

Koristit ćemo spring-cloud-config-monitor za praćenje promjena u konfiguraciji i emitiranje događaja koristeći RabbitMQ kao prijevoz.

Samo trebamo ažurirati primjena.svojstva i dajte RabbitMQ detalje:

spring.rabbitmq.host = localhost spring.rabbitmq.port = 5672 spring.rabbitmq.username = gost spring.rabbitmq.password = gost

4.3. GitHub Webhook

Sve je sada postavljeno. Jednom kada poslužitelj dobije obavijest o promjenama konfiguracije, emitirat će to kao poruku RabbitMQ-u. Klijent će slušati poruke i ažurirati svoju konfiguraciju kad se prenese događaj promjene konfiguracije. Međutim, kako će poslužitelj sada postupiti s izmjenom?

Moramo konfigurirati GitHub Webhook. Idemo na GitHub i otvorimo svoj repozitorij koji sadrži konfiguracijska svojstva. Sad, birajmo Postavke i Webhook. Kliknimo na Dodajte webhook dugme.

URL korisnog tereta URL je za naš konfiguracijski poslužitelj '/monitor' krajnja točka. U našem slučaju URL će biti otprilike ovako:

// korijen: [zaštićen e-poštom] _IP: 8888 / monitor

Samo se trebamo promijeniti Vrsta sadržaja u padajućem izborniku do aplikacija / json. Dalje, molim vas, otiđite Tajna ispraznite i kliknite na Dodajte webhook gumb - nakon toga smo svi spremni.

5. Ispitivanje

Provjerimo jesu li pokrenute sve aplikacije. Ako se vratimo i provjerimo klijenta, pokazat će se Korisnička uloga kao 'Programer' i korisnička lozinka kao 'd3v3L‘:

$> curl // localhost: 8080 / whoami / Mr_Pink Pozdrav Mr_Pink! Vi ste (n) programer i vaša lozinka je 'd3v3L'.

Prije smo morali koristiti '/osvježiti' krajnja točka za ponovno učitavanje promjena u konfiguraciji. Otvorimo datoteku svojstava, promijenimo Korisnička uloga natrag u Programer i pritisnite promjene:

user.role = Programer

Ako sada provjerimo klijenta, vidjet ćemo:

$> curl // localhost: 8080 / whoami / Mr_Pink Pozdrav Mr_Pink! Vi ste (n) programer i vaša lozinka je 'd3v3L'.

Klijent Config ažurirao je svoju konfiguraciju bez ponovnog pokretanja i bez eksplicitnog osvježavanja gotovo istovremeno. Možemo se vratiti na GitHub i otvoriti nedavno stvoreni Webhook. Na samom dnu nalaze se Nedavne isporuke. Možemo odabrati jedan na vrhu popisa (pod pretpostavkom da je ovo bila prva promjena - ionako će biti samo jedna) i ispitati JSON koji je poslan na config poslužitelj.

Također možemo provjeriti zapise konfiguracije i poslužitelja, a vidjet ćemo unose:

o.s.cloud.bus.event.RefreshListener: Primljeni zahtjev za daljinskim osvježavanjem. Ključevi osvježeni []

6. Zaključak

U ovom smo članku uzeli postojeći proljetni konfiguracijski poslužitelj oblaka i klijenta i dodali krajnju točku aktuatora za osvježavanje konfiguracije klijenta. Dalje smo koristili Spring Cloud Bus za emitiranje promjena konfiguracije i automatizaciju ažuriranja klijenta. Također smo konfigurirali GitHub Webhook i testirali cijelu postavku.

Kao i uvijek, kod korišten tijekom rasprave možete pronaći na GitHubu.