Spring Cloud ist eine geordnete Sammlung einer Reihe von Frameworks. Es nutzt die Entwicklungsquote von Spring Boot, um die Entwicklung einer verteilten Systeminfrastruktur wie Service-Erkennungsregistrierung, Konfigurationszentrum, Message-Bus, Lastausgleich, Leistungsschalter, Datenüberwachung usw. geschickt zu vereinfachen, die mit dem Entwicklungsstil von Sprung Boot in einem Klick gestartet und bereitgestellt werden können. Die Frühling stellt Räder nicht wiederholt her. Es kombiniert nur die relativ ausgereiften und praktischen Service -Rahmenbedingungen, die von verschiedenen Unternehmen entwickelt wurden. Es wird über komplexe Konfigurationen und Implementierungsprinzipien im Spring -Boot -Stil umverpackt und schützt und lässt Entwickler letztendlich ein einfaches, leicht zu verstehenes, einfach zu bereitgestelltes und einfach zu verwaltetes verteiltes Systementwicklungs -Toolkit.
Als nächstes werden wir SpringCloud verwenden, um eine einfache Microservice -Architektur zu implementieren.
Alle folgenden Codes wurden offen für Github, Adresse: https://github.com/lynnlovemin/SofService
Eureka (Serviceregistrierung und Entdeckung)
Führen Sie zunächst verwandte Abhängigkeitspakete ein
<in <Stent> <GroupId> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 1.5.9.Release </Version> <RelativePath/> <!-SOOKUP-Elternteil aus Repository-> </parent> <Propions> <Wormes> <Formen> <RelativePaths/> <! <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <projekts <CruupId> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Eureka </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springframework <SupructId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <Depopentcy> <gruppe> org.springFramework </abhängig> </abhängig> <abhängigkeit> <GroupId> org.springFramework <plugins> <gruppe> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> <Reposories> <Repository> <ID> Spring-Milestones </id> <name> Spring-Spring-Melestones </name> milestones </name> milestones </name> milestones </name> milestones </name> milestones </name> <URL> https://repo.spring.io/milestone </url> <snapshots> <enabled> false </enabled> </snapshots> </repository> </repository> </repositories>
Konfigurieren Sie application.yml
Server: Port: 8761eureka: Instanz: hostname: localhost client: RegisterWitHeureka: false fetchregistry: false serviceurl: defaultZone: http: // $ {eureka.instance.hostname}: $ {Server.port}/eureka/Erstellen Sie eine Startklassenanwendung
@EnableEureKaserver@SpringbootApplicationPublic Class Application {public static void main (String [] args) {SpringApplication.run (application.class, args); }} Führen Sie die Hauptmethode und die Browser -Besuche aus: http: // localhost: 8761, und wir können die folgende Schnittstelle im Browser sehen:
Es bedeutet, dass Eureka erfolgreich gestartet wird.
Als nächstes erkennen wir den Schuldenbilanz, den Leistungsschalter, das Gateway und der Kunde. Alle Dienste sollten in Eureka registriert werden. Wenn Sie Eureka besuchen, können Sie alle registrierten Dienste sehen.
Kunde (Kunde)
pom.xml
<in <Stent> <GroupId> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 1.5.9.Release </Version> <RelativePath/> <!-SOOKUP-Elternteil aus Repository-> </parent> <Propions> <Wormes> <Formen> <RelativePaths/> <! <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <projekts <gruppeID> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Eureka </artifactid> </abhängig> <Depopentcy> <gruppe> org.springFramework <gruppeId> org.springFramework.boot </gruppeId> <artifactId> Spring-Boot-Starter-Test </artifactId> <Schope> test </scope> </abhängig> </abhängig> </abhängig <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependency> </dependency> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> <Repositories> <Prepository> <id> Spring-milestones </id> <name> Spring-Meilensteine </name> <url> https://Repo.spring.io/milestone </milestone </miltone </miltone </miltone </milt> </url> </url> </url> </url> </milt> </idlabo> </milestone </milestone </milestone </milstone </mile> </mill> </url> </url> </url> </url> </url> </milt> </mile> </milestone; </snapshots> </repository> </repository> </repository> </repository> </repository> </repository>
application.yml
Eureka: Client: serviceurl: defaultZone: http: // localhost: 8761/eureka/#register hier in Eureka Server: Port: 8763spring: Anwendung: Name: Service-Hi
Anwendungsklasse
@SpringBootApplication@enableEureKaclient@rastControllerPublic Class Application {public static void main (String [] args) {SpringApplication.run (Applicatioin.class, args); } @Value ("$ {server.port}") String -Port; // Hier bieten wir eine Schnittstelle @RequestMapping ("/hi") public String Home (@RequestParam -String -Name) {return "hi"+name+", ich komme aus port:"+port; }}Täuschung (Schuldenbilanz, Leistungsschalter)
pom.xml
<in <Stent> <GroupId> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 1.5.9.Release </Version> <RelativePath/> <!-SOOKUP-Elternteil aus Repository-> </parent> <Propions> <Wormes> <Formen> <RelativePaths/> <! <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <projekts <gruppeID> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Eureka </artifactid> </abhängig> <Depopentcy> <gruppe> org.springFramework <gruppeId> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Fehl </artifactId> </abhängig> <depecture> <gruppe> org.springFramework <gruppeId> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Hystrix-Dasboard </artifactId> </abhängig> <Depopentcy> <GroupID> org.springFramework </abhängig> </abhängigen </abhängigManagement> <build> <PLUGINS> <PLUGIN> <GruppeId> org.springFramework <URL> https://repo.spring.io/milestone </url> <snapshots> <enabled> false </enabled> </snapshots> </repository> </repositories>
application.yml
Eureka: Client: serviceurl: defaultZone: http: // localhost: 8761/eureka/server: port: 8765Spring: Anwendung: Name: service-feignfesign: hystrix: aktiviert: true: true: true
Anwendungsklasse
@SpringBootApplication@enablediscoveryClient@enableFeignclients@enableHyStrixDashboardPublic Class Application {public static void main (string [] args) {SpringApplication.run (application.class.class, args); }}Bieten Sie dann einen Dienst an, seine Funktion besteht darin, Schuldenbilanz- und Leistungsschalterfunktionen zu erledigen
@FeignClient (value = "service-hi, fallback = plantualServicehihyStrict.class) Public Interface SchedualServicehi {@RequestMapPing (value ="/hi ", method = requestMethod.get) String SayShifromclientone (@RequestParam (value =" name ") Zeichenname;}; @ComponentPublic Class SchedualServicEHihystrict implementiert SchedualServicehi {@Override public String SayShifromClientone (String -Name) {return "sorry"+name; }}FeignClient Wir geben den Namen an: Service-HI, Fallback angegeben beim Erstellen des Clients zuvor. Auf diese Weise können wir beim Starten mehrerer Kunden feststellen, dass auf HTTP -Anfragen unterschiedliche vorstellbare Ports abwechselnd zugegriffen werden. Wenn der Client gestoppt wird, gibt der Zugriff auf die Schnittstelle eine Fehlermeldung zurück.
Zuul (Service Gateway)
Im Allgemeinen werden wir den Kunden nicht direkt der Außenwelt aussetzen, sondern ihn über das Service -Gateway weiterleiten. Die internen Dienste werden innerhalb des örtlichen Netzwerks mitgeteilt und können nicht von der Außenwelt zugreifen. Über das Service Gateway können wir auch die Sicherheitsüberprüfung der Schnittstellen durchführen und einheitlich abfangen. Bitte beachten Sie den Code:
pom.xml
<in <Stent> <GroupId> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 1.5.9.Release </Version> <RelativePath/> <!-SOOKUP-Elternteil aus Repository-> </parent> <Propions> <Wormes> <Wirps> <RelativePath/> <! <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <projekts <gruppeID> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Eureka </artifactid> </abhängig> <Depopentcy> <gruppe> org.springFramework <SupructId> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-ZuUul </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springframework </abhängig> <DepopentyManagement> <De vorstellen> <Deponcise> <GroupId> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Abhängigkeiten </artifactId> <version> dalstency <build> <PLUGINS> <Gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> <Reposories> <polsters <URL> https://repo.spring.io/milestone </url> <snapshots> <enabled> false </enabled> </snapshots> </repository>
application.yml
Eureka: Client: serviceurl: defaultZone: http: // localhost: 8761/eureka/server: port: 8080spring: Anwendung: Name: service-Zuulzuul: Routes: API-B: Pfad:/api/** serviceIs: service-FEIGE #all Anfragen, der mit dem API-Zugriff auf den Service-Feign-Service-Service startet, starten mit dem API-ABGE-FEEG-Service-Service-Service-Service.
Anwendungsklasse
@EnableCuulProxy@enableEureKaclient@SpringbootApplicationPublic Class Application {public static void main (String [] args) {SpringApplication.run (application.class, args); }}Starten Sie Anwendung und Zugriff: http: // localhost: 8080/api/hi, um auf die zuvor definierte Schnittstelle zuzugreifen. Als nächstes fangen wir die Schnittstelle ab:
/*** filterType: Gibt eine Zeichenfolge zurück, die den Typ des Filters darstellt. Vier Filtertypen mit unterschiedlichen Lebenszyklen sind in Zuul definiert, wie folgt: Vor: Vor dem Routing: Beim Routing Post: Nach dem Routing -Fehler: Fehleraufruf Filterorder: Filterorder: Filterreihenfolge sollte filter: Hier können Sie logische Beurteilung schreiben, ob Filter, dieser Artikel ist wahr, Filter für immer. Lauf: Die spezifische Logik des Filters. Es ist sehr kompliziert zu verwenden, einschließlich der Überprüfung von SQL und NoSQL, um festzustellen, ob die Anforderung die Erlaubnis zum Zugriff hat. */@Componentpublic class myFilter erweitert Zuulfilter {private static logger log = loggerfactory.getLogger (myfilter.class); @Override public String filterType () {return "pre"; } @Override public int filterOrder () {return 0; } @Override public boolean sollte filter () {return true; } @Override public Object run () {requestContext ctx = requestContext.getCurrentContext (); HttpServletRequest request = ctx.getRequest (); log.info (string.format (" %s >>> %s", request.getMethod (), request.getRequesturl (). toString ()); Object AccessToken = Request.GetParameter ("Token"); if (accessToken == null) {log.warn ("Token ist leer"); ctx.setsendzuResponse (falsch); ctx.setResponsestatuscode (401); try {ctx.getResponse (). getWriter (). Write ("Token ist leer"); } catch (Ausnahme e) {} return null; } log.info ("ok"); null zurückkehren; }} Auf diese Weise werden wir zuerst die Run -Methode in der MyFilter -Klasse ausführen, bevor wir die Schnittstelle aufrufen. Bei dieser Methode können wir eine Reihe von Sicherheitsüberprüfungen wie Token durchführen.
OK, eine einfache Microservice -Architektur wurde erstellt.
Alle oben genannten Code wurden offen für Github, Adresse: https://github.com/lynnlovemin/SofService
Das obige ist die einfache Microservice -Architektur, die der Editor Ihnen vorgestellt hat. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird rechtzeitig antworten.