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.