Kratki vodič za Spring Cloud Consul

1. Pregled

Projekt Spring Cloud Consul omogućuje jednostavnu integraciju s programom Consul za Spring Boot.

Consul je alat koji pruža komponente za rješavanje nekih od najčešćih izazova u arhitekturi mikro usluga:

  • Service Discovery - za automatsku registraciju i poništavanje registracije mrežnih lokacija instanci usluga
  • Provjera zdravstvenog stanja - za otkrivanje kada instanca usluge radi i radi
  • Distribuirana konfiguracija - kako bi se osiguralo da sve instance usluge koriste istu konfiguraciju

U ovom ćemo članku vidjeti kako možemo konfigurirati aplikaciju Spring Boot da koristi ove značajke.

2. Preduvjeti

Za početak se preporučuje da na brzinu pogledate Consula i sve njegove značajke.

U ovom ćemo članku upotrijebiti agenta Consula koji radi lokalnihost: 8500. Za više detalja o tome kako instalirati Consul i pokrenuti agenta, pogledajte ovu vezu.

Prvo ćemo morati dodati ovisnost o proljetnom oblaku-starter-konzul-sve pom.xml:

 org.springframework.cloud proljeće-oblak-starter-konzul-svi 1.3.0.OSLOBOĐENJE 

3. Otkrivanje usluge

Napišimo našu prvu aplikaciju Spring Boot i povežimo se s konzul agentom:

@SpringBootApplication javna klasa ServiceDiscoveryApplication {public static void main (String [] args) {new SpringApplicationBuilder (ServiceDiscoveryApplication.class) .web (true) .run (args); }}

Prema zadanim postavkama, Spring Boot će se pokušati povezati s agentom Consul na lokalnihost: 8500. Da bismo koristili druge postavke, moramo ažurirati primjena.iml datoteka:

proljeće: oblak: konzul: domaćin: lokalna luka: 8500

Zatim, ako posjetimo web mjesto konzul-ovog agenta u pregledniku na // localhost: 8500, vidjet ćemo da je naša aplikacija pravilno registrirana u Konzulu s identifikatorom od "$ {Spring.application.name}: $ {profili odvojeni zarezom}: $ {server.port}".

Da bismo prilagodili ovaj identifikator, moramo ažurirati svojstvo proljeće. oblak.otkrivanje.instanceId s drugim izrazom:

spring: application: name: myApp cloud: consul: discovery: instanceId: $ {spring.application.name}: $ {random.value}

Ako ponovo pokrenemo aplikaciju, vidjet ćemo da je registrirana pomoću identifikatora "MyApp" plus slučajna vrijednost. To nam treba za pokretanje više instanci naše aplikacije na našem lokalnom računalu.

Konačno, da bismo onemogućili otkrivanje usluge, moramo postaviti svojstvo proljeće.krov.konzul.otkrivanje.omogućeno do lažno.

3.1. Traženje usluga

Već imamo registriranu aplikaciju u Konzulu, ali kako klijenti mogu pronaći krajnje točke usluge? Potrebna nam je usluga otkrivanja klijenta da bismo od Konzula dobili pokrenutu i dostupnu uslugu.

Proljeće pruža a API DiscoveryClient za ovo, što možemo omogućiti pomoću @EnableDiscoveryClient napomena:

@SpringBootApplication @EnableDiscoveryClient javna klasa DiscoveryClientApplication {// ...}

Tada možemo ubrizgati DiscoveryClient bean u naš kontroler i pristupite instancama:

@RestController javna klasa DiscoveryClientController {@Autowired private DiscoveryClient discoveryClient; javna Izborna uslugaUrl () {return discoveryClient.getInstance ("myApp") .stream () .findFirst () .map (si -> si.getUri ()); }}

Na kraju ćemo definirati krajnje točke aplikacije:

@GetMapping ("/ discoveryClient") javni niz discoveryPing () baca RestClientException, ServiceUnavailableException {URI service = serviceUrl () .map (s -> s.resolve ("/ ping")) .orElseThrow (ServiceUnavailableException: new); vratiti restTemplate.getForEntity (usluga, String.class) .getBody (); } @GetMapping ("/ ping") javni niz ping () {return "pong"; }

The “MyApp / ping” path je naziv aplikacije Spring s krajnjom točkom usluge. Konzul će pružiti sve dostupne imenovane programe "MyApp".

4. Provjera zdravstvenog stanja

Konzul povremeno provjerava ispravnost krajnjih točaka usluge.

Prema zadanim postavkama, Proljeće primjenjuje zdravstvenu krajnju točku za povratak 200 OK ako je aplikacija pokrenuta. Ako želimo prilagoditi krajnju točku, moramo ažurirati application.yml:

proljeće: oblak: konzul: otkriće: healthCheckPath: / my-health-check healthCheckInterval: 20s

Kao rezultat toga, konzul će anketirati "/ Moj-zdravstveni pregled" krajnja točka svakih 20 sekundi.

Definirajmo našu prilagođenu uslugu provjere zdravstvenog stanja za vraćanje ZABRANJENO status:

@GetMapping ("/ my-health-check") javni ResponseEntity myCustomCheck () {String message = "Testiranje moje funkcije provjere zdravlja"; vrati novi ResponseEntity (poruka, HttpStatus.FORBIDDEN); }

Ako odemo na web mjesto agenta Konzula, vidjet ćemo da naša prijava propada. Da bi to popravio, "/ Moj-zdravstveni pregled" usluga bi trebala vratiti HTTP 200 OK statusni kod.

5. Distribuirana konfiguracija

Ova značajka omogućuje sinkronizaciju konfiguracije između svih usluga. Konzul će paziti na promjene konfiguracije, a zatim će pokrenuti ažuriranje svih usluga.

Prvo, u našu moramo dodati ovisnost spring-cloud-starter-consul-config pom.xml:

 org.springframework.cloud proljeće-oblak-starter-konzul-konfiguracija 1.3.0.OSLOBOĐENJE 

Također trebamo premjestiti postavke imena programa Consul i Spring iz mape primjena.iml datoteke na bootstrap.yml datoteku koju Spring prvo učita.

Zatim moramo omogućiti Spring Cloud Consul Config:

spring: application: name: myApp cloud: consul: host: localhost port: 8500 config: enabled: true

Spring Cloud Consul Config potražit će nekretnine u Consul na “/ Config / myApp”. Pa ako imamo svojstvo koje se zove "Moj.prop", trebali bismo stvoriti ovo svojstvo na web mjestu Consul agent.

Vlasništvo možemo stvoriti odlaskom na “KLJUČ / VRIJEDNOST” odjeljak, a zatim ulazak “/ Config / myApp / my / prop” u "Stvori ključ" oblik i "Pozdrav svijete" kao vrijednost. Na kraju kliknite "Stvoriti" dugme.

Imajte na umu da ako koristimo profile Spring, moramo dodati profile pored naziva aplikacije Spring. Na primjer, ako koristimo razv profila, konačni put u Konzulu bit će “/ Config / myApp, dev”.

Sada, da vidimo kako izgleda naš kontroler s ubrizganim svojstvima:

@RestController javna klasa DistributedPropertiesController {@Value ("$ {my.prop}") Vrijednost niza; @Autowired privatna svojstva MyProperties; @GetMapping ("/ getConfigFromValue") javni niz getConfigFromValue () {povratna vrijednost; } @GetMapping ("/ getConfigFromProperty") javni niz getConfigFromProperty () {return svojstva.getProp (); }}

I MyProperties razred:

@RefreshScope @Configuration @ConfigurationProperties ("moj") javna klasa MyProperties {private String prop; // standardni geter, postavljač}

Ako pokrenemo aplikaciju, polje vrijednost i Svojstva imaju isto "Pozdrav svijete" vrijednost od Konzula.

5.1. Ažuriranje konfiguracije

Što je s ažuriranjem konfiguracije bez ponovnog pokretanja aplikacije Spring Boot?

Ako se vratimo na stranicu agenta Konzula i ažuriramo svojstvo “/ Config / myApp / my / prop” s drugom vrijednošću poput "Novi zdravi svijet", zatim polje vrijednost neće se promijeniti i polje Svojstva bit će ažuriran na "Novi zdravi svijet" kako se očekivalo.

To je zato što polje Svojstva je MyProperties razred ima @RefreshScope bilješka. Sav grah označen s @RefreshScope napomena će se osvježiti nakon promjena konfiguracije.

U stvarnom životu ne bismo trebali imati svojstva izravno u Konzulu, već bismo ih trebali trajno negdje pohraniti. To možemo učiniti pomoću poslužitelja za konfiguriranje.

6. Zaključak

U ovom smo članku vidjeli kako postaviti naše aplikacije Spring Boot za rad s Consulom u svrhu otkrivanja usluga, prilagoditi pravila provjere stanja i podijeliti distribuiranu konfiguraciju.

Također smo uveli niz pristupa kako bi se klijenti pozivali na ove registrirane usluge.

Kao i obično, izvore možete pronaći na GitHubu.


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