Überblick
Angenommen, es gibt jetzt eine Anforderung:
Unsere Anwendung wird auf 10 Maschinen bereitgestellt. Wenn wir einen bestimmten Konfigurationsparameter anpassen, müssen wir die Maschine nicht neu starten. 10 Maschinen können automatisch die neueste Konfiguration erhalten.
Wie kann man es erreichen? Es gibt viele Arten wie:
1. Platzieren Sie die Konfiguration in einer Datenbank, und jedes Mal, wenn die Anwendung die Konfiguration direkt aus der DB liest. Auf diese Weise müssen wir nur eine DB -Änderung vornehmen und die neuesten Konfigurationsinformationen in der Datenbank aktualisieren. Unabhängig davon, wie viele Anwendungen sind, können sie alle Konfigurationsinformationen von derselben DB erhalten, sondern können natürlich die neueste Konfiguration erhalten.
2. Jeder Computer bietet eine UpdateConfig -Schnittstelle, die die Konfigurationsinformationen aktualisiert. Wenn die Konfiguration geändert werden muss, wird die updateConfig -Schnittstelle des Servers nacheinander aufgerufen.
3.. Verwenden Sie Redis, um es zu implementieren und die Konfigurationsinformationen auf Redis zu platzieren. Auf diese Weise müssen Sie sie jedoch jedes Mal lesen, was über mehr Netzwerkanforderungen enthält.
Die oben genannten drei Methoden sind am einfachsten zu denken und sind leicht zu tun, aber natürlich gibt es viele Nachteile. Obwohl es viele Mängel gibt, tun einige traditionelle Unternehmen dies.
In Internetunternehmen habe ich im Grunde noch nie jemanden gesehen, der so spielt, sie alle verwenden verteilte Konfigurationszentren. Verwenden Sie Open Source oder implementieren Sie es selbst. Derzeit gibt es viele Open -Source -Konfigurationszentren, und die Spring Cloud -Konfiguration ist die beste unter ihnen. Als nächstes werden wir Spring Cloud -Konfiguration verwenden, um ein verteiltes Konfigurationszentrum zu implementieren.
Unabhängig davon, ob Sie die neueste Spring Boot 2.0 -Version verwenden
Früher habe ich die neueste Spring Cloud 2.0 verwendet, um eine verteilte Demo durchzuführen, die das Konfigurationszentrum ist. Ich fand es einfach, aber es dauerte einen ganzen Tag, um es zu erledigen. Es gibt mehrere Gründe:
1. Das entsprechende Dokument der Spring Cloud wurde nicht vollständig aktualisiert und es gibt ein Problem und kann im Dokument nicht gefunden werden.
2. Derzeit gibt es nur wenige Unternehmen, die Version 2.0 verwenden, und es gibt keine spezifischen praktischen Artikel im Internet. Nachdem das Problem abgebrochen war, konnte Baidu keine Lösung finden. Für Google ist es im Grunde schwierig, Lösungen zu finden, die alle sporadische Wissensfragmente sind.
3.. In der Version 2.0 gibt es einige geringfügige Änderungen in der Version von 2.0, und wenn dies nach der Version 1.5.x noch geschehen ist, funktioniert dies nicht.
Basierend auf den oben genannten Gründen wird empfohlen, die Version 1.5.x als zuverlässiger zu verwenden. Der folgende Artikel wird in der folgenden Version eingeführt:
Federschuh:
1.5.2.Release
Die entsprechende Federwolke verwendet:
Dalston.Release
Erstellen Sie den Frühlings -Cloud -Konfigurationsserver
Wenn Sie die Konfiguration nur einheitlich mit der Spring Cloud -Konfiguration einheitlich verwalten möchten und vorerst im Konfigurationszentrum nicht in hohem Maße verfügbar sein möchten, benötigen Sie nur Konfigurations- und Buskomponenten. Wenn Sie jedoch eine hohe Verfügbarkeit sicherstellen möchten, müssen Sie auch die Registrierungserkennungskomponente der Spring Cloud verwenden.
Zusätzlich zu Config und Bus müssen wir Git verwenden. Da Spring Cloud -Konfiguration Git für die Versionsverwaltung verwendet.
Es ist sehr einfach, ein Konfigurationszentrum basierend auf der Feder -Cloud -Konfiguration zu erstellen. Dies erfolgt in wenigen kleinen Schritten.
【1】 Führen Sie Konfigurations- und Buskomponenten ein
<De vorhöhe> <gruppe> org.springframework
【2】 Die Startkurs verwendet @enableConfigServer Annotation
Paket spring.cloud.config; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootApplication; Importion org.springFramework.config.server.enableConFigserverververse | ConfigApplication {public static void main (String [] args) {SpringApplication.run (configApplication.class, args); }}【3】 application.yml -Datei Konfiguriert Rabbitmq- und Git -Repositories
Server: Port: 8040spring: Anwendung: Name: Spring-Cloud-Config-Server Cloud: Konfiguration: Server: Git: URI: https://gitlab.xxxxxx.com/config/xxxxx.git Search-Pads: username: xxxx password: xxxxxxxx acht: 127.0.0.0.0.0. Passwort: Gastmanagement: Sicherheit: Aktiviert: Falsch
Rabbitmq ist konfiguriert, da die Buskomponente sie verwenden muss, um den Client zu benachrichtigen und die Konfigurationsänderungen vorgenommen werden. Denken Sie auch daran, zu verwenden
Management: Sicherheit: aktiviert: Falsch
Die Überprüfung wird geschlossen, und die nächste Operation meldet immer einen Autorisierungsfehler.
Das Server -Konfigurationszentrum wurde abgeschlossen. Jetzt können Sie ein kleines Experiment auf dem Server durchführen und eine Demo-dev.properties-Datei einreichen. Der Inhalt der Datei lautet wie folgt:
Adresse = Hallo
Dann verwenden
http: // localhost: 8040/Demo/Dev
Wenn Ausgabe
{"Adresse": "Hallo"}Dies bedeutet, dass die Interaktion zwischen Federwolkenkonfiguration und Git in Ordnung ist.
Client Access Configuration Center
Unsere Ziele:
Nachdem die Konfigurationsinformationen geändert und an Git übermittelt wurden, erhalten alle mit der Spring Cloud -Konfiguration verbundenen Clients sofort Benachrichtigungen und erhalten die neuesten Konfigurationsinformationen.
Das Folgende beschreibt, wie dieses Ziel erreicht werden kann.
Der Kunde muss nur wenige kleine Schritte ausführen, um die Zugangsaktion zu vervollständigen.
【1】 Führen Sie Abhängigkeiten ein
<De vorangestellt> <gruppe> org.springFramework <gruppeId> org.springframework.cloud </Groupid> <artifactId> Spring-Cloud-Starter-Config </artifactid> </abhängig> <abhängigkeit> <gruppe> org.springFramework
Die Einführung von Spring-Boot-Starter-Web dient nur zum Experimentieren.
【2】 Konfigurieren Sie Rabbitmq und führen Sie URLs in das Konfigurationszentrum ein
application.Properties
Spring.Application.Name = Spring-Cloud-Config-Client1Server.port = 8042Management.security.Enabled = falesspring.rabbitmq.host = 127.0.0.1Spring.rabbitmq.Port = 5672spring.rabbitmq.USERNAME = GASTSWRING.RABRING.RABBING.RABBING.RABBING.RABBING.RABBING.RABBRING.RABBRING.RABBRING.RABRING.RABRING.RABRING.RABRING.RABRING.RABRING
Bootstrap.Properties
spring.cloud.config.name = Demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http: // localhost: 8040/
Es gibt drei Punkte, auf die man sich beachten kann:
1. Verifizierung schließen: Management.Security.Enabled = false
2. Die Konfiguration im Zusammenhang mit der Feder -Cloud -Konfiguration muss in Bootstrap.Properties platziert werden
3. Verwenden Sie Spring.cloud.config.uri, um die Adresse des Konfigurationszentrums anzugeben
Darüber hinaus muss die Startklasse für den Client keine Anmerkungen im Zusammenhang mit Konfiguration und Bus hinzufügen .
Nachdem wir zu diesem Client gekommen sind, können wir einen Controller verwenden, um zu experimentieren.
Paket SpringCloudConfig.client; import org.springframework.bean.factory.annotation.value; import org.springframework.cloud.context.config.annotation org.springFramework.web.bind.annotation.restController;@rastController@refreshScopepublic class hellocontroller {@Value ("$ {adresce}") private String -Adresse; @RequestMapping ("/adress") public String getAddress () {return this.address; }}Unter der Annahme, dass der oben genannte HelloController die Adresskonfiguration verwenden muss, müssen Sie nur @ReFreshScope und @Value -Anmerkungen verwenden.
@Refrescopepublic Class HelloController {} @Value ("$ {adresse}") private String -Adresse;Um zu überprüfen, ob der Client die neuesten Konfigurationsinformationen erhalten kann, geben Sie a an
@RequestMapping ("/adress") public String getAddress () {return this.address; }Verfahren.
Lassen Sie uns die Datei der Demo-dev.properties ändern und den Wert an ändern auf
Adresse = Hallo Update
Und senden Sie es Git. Zu diesem Zeitpunkt nennen wir die GetAddress -Schnittstelle
http: // localhost: 8041/Adresse
Ich stellte fest, dass ich nicht den neuesten Wert erhalten habe. Das liegt daran, dass wir nach der Erstellung des Drängens auf Git keinen Frühlingswolkenbus benachrichtigen. Sie können nach dem Postantrag eine Postanforderung verwenden und die folgende Schnittstelle anrufen, um den Bus zu benachrichtigen.
http: // localhost: 8040/bus/aktualisiert
Sobald diese Schnittstelle erfolgreich aufgerufen wurde, benutzt Bus Rabbitmq, um alle Clients darüber zu informieren, dass die Konfiguration aktualisiert wurde.
Besondere Aufmerksamkeit:
Wir rufen die Schnittstelle /Bus /Aktualisierung des Servers an, nicht die /Bus- /Aktualisierungsschnittstelle des Clients.
Wenn Sie jedes Mal, wenn Sie einreichen, die Schnittstelle /Bus /Aktualisierung auf dem Server anrufen müssen, ist dies zu problematisch. Sie können Webhook verwenden, um zu helfen.
Wenn Sie das neue GitLab verwenden, müssen Sie nur auf [Einstellungen] im Projekt klicken. Klicken Sie dann auf [Integrationen], um das Webhook einzurichten, wie in der folgenden Abbildung gezeigt:
Füllen Sie die URL in die Adresse /Bus /Aktualisierung der Schnittstelle des Configuration Center -Servers aus und klicken Sie dann auf [Webhook hinzufügen].
Vergleich mit Ctrips Apollo
Die exquisite Sache an der Spring -Cloud -Konfiguration ist, dass seine Konfiguration in Git gespeichert ist, die auf natürliche Weise Konfigurationsmodifikation, Berechtigungen, Versionen und andere Probleme isoliert. Dieses Design macht die Frühlingscloud -Konfiguration insgesamt sehr einfach, bringt aber auch einige Unannehmlichkeiten.
Versuchen wir eine einfache Zusammenfassung:
| Funktionspunkte | Apollo | Spring Cloud -Konfiguration | Bemerkung |
|---|---|---|---|
| Konfigurationsschnittstelle | Eine Schnittstelle verwaltet verschiedene Umgebungen und verschiedene Clusterkonfigurationen | Keiner muss durch Git arbeiten | |
| Konfigurieren Sie die effektive Zeit | Echtzeit | Neustart nimmt wirksam oder manuelle Aktualisierung wird wirksam | Die Spring Cloud-Konfiguration muss das Git-Webhook sowie eine zusätzliche Meldungswarteschlange übergeben, um Echtzeiteffekte zu unterstützen |
| Versionsverwaltung | Release -Verlaufs- und Rollback -Schaltflächen werden direkt auf der Schnittstelle bereitgestellt | Keiner muss durch Git arbeiten | |
| Graustufenfreigabe | Unterstützung | Nicht unterstützt | |
| Autorisierung, Prüfung, Prüfung | Direkt an der Schnittstelle unterstützt und unterstützt die Trennung von Änderungs- und Veröffentlichungsberechtigungen | Müssen über das Git -Repository eingestellt werden und unterstützt keine Änderungs- und Freigabe -Berechtigungstrennung | |
| Instanzkonfigurationsüberwachung | Es ist leicht zu erkennen, welche Clients derzeit welche Konfigurationen verwenden | Nicht unterstützt | |
| Konfiguration, um Leistung zu erhalten | Schneller, Zugriff über Datenbank und Zwischenunterstützung | Langsamer, muss aus dem Git -Klon -Repository und dann aus dem Dateisystem lesen | |
| Kundenunterstützung | Unterstützen Sie nativ alle Java- und .NET | Unterstützen Sie Springanwendungen und geben Sie Annotation an, um die Konfiguration zu erhalten | Apollo hat eine breitere Reihe von Anwendungen |
Ich persönlich empfehle die Verwendung von Spring Cloud -Konfiguration, die in der Community sehr leicht und aktiv ist. Bei Problemen ist es leicht, eine Lösung zu finden. Darüber hinaus denke ich persönlich, dass der Unterschied zwischen Apollo und Spring Cloud -Konfiguration nur darin besteht, dass es keine Schnittstelle gibt. Die Benutzeroberfläche kann erledigt werden, und wir können dies über Git tun, aber die Benutzererfahrung ist nicht so gut.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.