Tavaszi felhő busz

1. Áttekintés

Ebben a cikkben az új Spring Cloud Bus projektet fogjuk megvizsgálni. A Spring Cloud Bus könnyű üzenetközvetítővel kapcsolja össze az elosztott rendszer csomópontjait. Az elsődleges felhasználás a konfigurációs változtatások vagy más kezelési információk közvetítése. Gondolhatunk rá, mint elosztott működtetőre.

A projekt az AMQP közvetítőt használja szállításként, de a RabbitMQ helyett Apache Kafka vagy Redis használható. Más szállításokat egyelőre nem támogatunk.

A bemutató során a RabbitMQ-t fogjuk használni fő szállítóeszközünkként - amelyet természetesen már futni is fogunk.

2. Előfeltételek

Mielőtt elkezdenénk, ajánlott, hogy már elkészült a „Gyors bevezető a tavaszi felhőbeállításokhoz”. Fogunk egy meglévő felhő-konfigurációs kiszolgálót és klienst, hogy kibővítsük őket, és automatikus értesítéseket adjunk a konfigurációs változásokról.

2.1. RabbitMQ

Kezdjük a RabbitMQ-val, amelyet javasoljuk, hogy RabbitMQ néven futtasson dokkoló képként. Ezt nagyon egyszerű beállítani - a RabbitMQ helyi futtatásához telepítenünk kell a Dockert és a Docker sikeres telepítése után a következő parancsokat kell futtatnunk:

docker pull rabbitmq: 3-menedzsment

Ez a parancs a RabbitMQ dokkoló képet az alapértelmezés szerint telepített és engedélyezett felügyeleti bővítménnyel együtt húzza le.

Ezután futtathatjuk a RabbitMQ-t:

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

Miután végrehajtottuk a parancsot, elmehetünk a webböngészőbe, és megnyithatjuk a // localhost: 15672 fájlt, amely megmutatja a felügyeleti konzol bejelentkezési űrlapját. Az alapértelmezett felhasználónév: 'vendég'; Jelszó: 'vendég'. A RabbitMQ az 5672-es porton is hallgatni fog.

3. Az aktuátor hozzáadása a Cloud Config klienshez

Futtatnunk kell a cloud config kiszolgálót és a cloud config klienst. A konfigurációs változtatások frissítéséhez minden alkalommal újra kell indítani az ügyfelet - ami nem ideális.

Állítsuk le a config klienst és jegyezzük fel ConfigClient vezérlő osztály @RefreshScope:

@SpringBootApplication @RestController @RefreshScope nyilvános osztály SpringCloudConfigClientApplication {// Kód ide ...}

Végül frissítsük a pom.xml fájlt, és adja hozzá az aktuátort:

 org.springframework.boot spring-boot-actuator 2.2.6.FELHASZNÁLÁS 

A legújabb verzió itt található.

Alapértelmezés szerint az összes működtető által hozzáadott érzékeny végpont biztosított. Ebbe beletartozik '/Frissítés' végpont. Az egyszerűség kedvéért frissítéssel kikapcsoljuk a biztonságot bootstrap.tulajdonságok:

management.security.enabled = hamis

Ezenkívül a Spring Boot 2-től kezdve az aktuátor végpontjai alapértelmezés szerint nincsenek kitéve. Ahhoz, hogy hozzáférhetővé tegyük őket, hozzá kell adnunk ezt egy alkalmazás.yml:

management: végpontok: web: expozíció: include: "*"

Először indítsuk el az ügyfelet, és frissítsük a felhasználói szerepkört a meglévőről 'Fejlesztő' nak nek 'Programozó' a GitHub tulajdonságfájljában. A Config server azonnal megmutatja a frissített értékeket; azonban az ügyfél nem fogja. Ahhoz, hogy az ügyfél új fájlokat láthasson, csak egy üres POST kérést kell küldenünk a címre '/Frissítés' végpont, amelyet a működtető adott hozzá:

$> curl -X POST // localhost: 8080 / aktuátor / frissítés

Vissza fogjuk kapni a JSON fájlt, amely a frissített tulajdonságokat tartalmazza:

["user.role"]

Végül ellenőrizhetjük, hogy a felhasználói szerepkör frissült-e:

$> curl // localhost: 8080 / whoami / Mr_Pink Helló Mr_Pink! Ön (n) programozó, és a jelszava 'd3v3L'.

A felhasználói szerepkör frissítése sikeresen és hívással történt '/Frissítés' végpont. Az ügyfél frissítette a konfigurációt újraindítás nélkül.

4. Tavaszi felhő busz

Az Actuator használatával frissíteni tudjuk az ügyfeleket. Felhőkörnyezetben azonban minden egyes kliensre át kell mennünk, és újra be kell töltenünk a konfigurációt az aktuátor végpontjának elérésével.

A probléma megoldásához használhatjuk a Spring Cloud Bus alkalmazást.

4.1. Ügyfél

Frissítenünk kell a cloud config klienst, hogy feliratkozhasson a RabbitMQ cserére:

 org.springframework.cloud spring-cloud-starter-bus-amqp 2.2.1. KÖZLEMÉNY 

A legújabb verzió itt található.

A konfigurációs kliens módosításainak befejezéséhez hozzá kell adnunk a RabbitMQ adatait, és engedélyeznünk kell a felhő buszt egy alkalmazás.yml fájl:

--- tavasz: rabbitmq: host: localhost port: 5672 felhasználónév: vendég jelszó: vendég felhő: busz: engedélyezve: igaz frissítés: engedélyezve: igaz 

Felhívjuk figyelmét, hogy alapértelmezett felhasználónevet és jelszót használunk. Ezt frissíteni kell a valós életben, a termelési alkalmazásokhoz. Ennél az oktatóanyagnál ez rendben van.

Most az ügyfélnek lesz egy másik végpontja ‘/ Bus-refresh’. Ennek a végpontnak a meghívása a következőket fogja okozni:

  • szerezze be a legfrissebb konfigurációt a konfigurációs kiszolgálóról, és frissítse a konfigurációt a @RefreshScope
  • üzenetet küld az AMQP központnak, tájékoztatva a frissítési eseményről
  • az összes feliratkozott csomópont frissíti a konfigurációját is

Így nem kell külön csomópontokra mennünk és elindítanunk a konfigurációs frissítést.

4.2. szerver

Végül adjunk hozzá két függőséget a konfigurációs kiszolgálóhoz a konfigurációs változtatások teljes automatizálásához.

 org.springframework.cloud spring-cloud-config-monitor 2.2.2.FELHASZNÁLÁS 

A legújabb verzió itt található.

 org.springframework.cloud spring-cloud-starter-stream-rabbit 3.0.4. KÖZLEMÉNY 

A legfrissebb verzió itt található.

Használni fogjuk spring-cloud-config-monitor a konfigurációs változások és az események közvetítése a RabbitMQ használatával szállításként.

Csak frissítenünk kell alkalmazás.tulajdonságok és adja meg a RabbitMQ adatait:

spring.rabbitmq.host = localhost spring.rabbitmq.port = 5672 spring.rabbitmq.username = vendég spring.rabbitmq.password = guest

4.3. GitHub Webhook

Most minden be van állítva. Amint a szerver értesítést kap a konfigurációs változásokról, ezt üzenetként továbbítja a RabbitMQ-nak. Az ügyfél meghallgatja az üzeneteket és frissíti a konfigurációját, amikor a konfiguráció-változás eseményt továbbítják. Egy szerver azonban most mit fog szólni a módosításról?

Be kell állítanunk egy GitHub webhookot. Menjünk a GitHub-ba, és nyissuk meg a konfigurációs tulajdonságokat tároló tárunkat. Most válasszuk ki Beállítások és Webhook. Kattintsunk a gombra Webhook hozzáadása gomb.

A hasznos adat URL a konfigurációs kiszolgálónk URL-je '/monitor' végpont. Esetünkben az URL valami ilyesmi lesz:

// root: [e-mail védett] _IP: 8888 / monitor

Csak változtatnunk kell Tartalom típus legördülő menüben alkalmazás / json. Ezután kérem, távozzon Titok üres és kattintson a gombra Webhook hozzáadása gomb - utána mindannyian készen vagyunk.

5. Tesztelés

Ellenőrizzük, hogy minden alkalmazás fut-e. Ha visszamegyünk és megnézzük az ügyfelet, akkor az megmutatja user.role mint 'Programozó' és felhasználói jelszó mint „d3v3L‘:

$> curl // localhost: 8080 / whoami / Mr_Pink Helló Mr_Pink! Ön (n) programozó, és a jelszava 'd3v3L'.

Korábban használnunk kellett '/Frissítés' végpont a konfigurációs változások újratöltéséhez. Nyissuk meg a tulajdonságfájlt, változtassunk meg user.role vissza a Fejlesztő és nyomja meg a változásokat:

user.role = Programozó

Ha most ellenőrizzük az ügyfelet, látni fogjuk:

$> curl // localhost: 8080 / whoami / Mr_Pink Helló Mr_Pink! Ön (n) fejlesztő, és a jelszava „d3v3L”.

A Config kliens frissítette a konfigurációját újraindítás és kifejezett frissítés nélkül szinte egyszerre. Visszaléphetünk a GitHub-ba, és megnyithatjuk a nemrégiben létrehozott Webhookot. A legvégén vannak a legutóbbi kézbesítések. Kiválaszthatunk egyet a lista tetején (feltéve, hogy ez volt az első változás - amúgy is csak egy lesz), és megvizsgálhatjuk a JSON-t, amelyet a config szerverre küldtek.

Ellenőrizhetjük a konfigurációs és a kiszolgálói naplókat is, és látni fogjuk a bejegyzéseket:

o.s.cloud.bus.event.RefreshListener: Távoli frissítési kérelem érkezett. Kulcsok frissítve []

6. Következtetés

Ebben a cikkben a meglévő tavaszi felhő konfigurációs kiszolgálót és klienst vettük át, és hozzáadtuk az aktuátor végpontját az ügyfél konfigurációjának frissítéséhez. Ezután a Spring Cloud Bus szolgáltatást használtuk a konfigurációs változások közvetítésére és az ügyfélfrissítések automatizálására. Konfiguráltuk a GitHub Webhookot, és teszteltük a teljes beállítást.

Mint mindig, a vita során használt kód megtalálható a GitHubon.