SpringCloud概述
面向服務(wù)的架構(gòu),是一種程序開發(fā)架構(gòu)的設(shè)計(jì)思想。它將不同的功能單元使用一個(gè)作為獨(dú)立的程序運(yùn)行,并且提供訪問(wèn)的入口(將這些單獨(dú)運(yùn)行的每個(gè)程序稱為服務(wù))。
一個(gè)SOA架構(gòu)的web應(yīng)用程序,是多個(gè)服務(wù)組成的!!!
SOA架構(gòu)的思想就是用于實(shí)現(xiàn),程序分布式的。所以我們也可以將SOA架構(gòu)的思想理解為分布式架構(gòu)的思想。
問(wèn)題:以上SOA架構(gòu),這樣的系統(tǒng)架構(gòu),有什么問(wèn)題?
答:(1)無(wú)法檢查服務(wù)的健康狀態(tài)(服務(wù)是否可用)。
(2)無(wú)法對(duì)服務(wù)進(jìn)行管理。
我們可以通過(guò)一個(gè)框架來(lái),解決這些問(wèn)題。那就是Spring Cloud。
Spring Cloud通過(guò)一個(gè)注冊(cè)中心(Eureka),統(tǒng)一管理了整個(gè)分布式系統(tǒng)的服務(wù)接口。
所有的服務(wù)(子系統(tǒng))在對(duì)外提供服務(wù)(接口)之前,必須要在注冊(cè)中心中注冊(cè)。我們開發(fā)人員就可以在注冊(cè)中心中,查看整個(gè)分布式系統(tǒng)的所有服務(wù)??!
我們SOA概念中稱為服務(wù)系統(tǒng)的東西,在Spring cloud有一個(gè)新的名字,叫實(shí)例(instance,實(shí)例系統(tǒng))!
Springcloud是提供了一整套企業(yè)級(jí)分布式云應(yīng)用的完美解決方案,能夠結(jié)合Spring Boot、Spring其它組件,實(shí)現(xiàn)快速開發(fā)的目的。
企業(yè)級(jí)開發(fā)越來(lái)越傾向Spring生態(tài)體系。當(dāng)然也包括SpringCloud了。
根據(jù)上圖所示,我們學(xué)習(xí)Spring Cloud首先要學(xué)習(xí)什么東西呢?
答:(1)必須要將Eureka配置成功
(2)實(shí)例是如何將服務(wù)在Eureka注冊(cè)的
(3)如何在Eureka查看整個(gè)分布式系統(tǒng)所有實(shí)例對(duì)外提供的服務(wù)(發(fā)現(xiàn)服務(wù))
(4)實(shí)例域?qū)嵗g是如何通訊的(調(diào)用)
第一步:配置Eureka服務(wù)器
第二步:創(chuàng)建注冊(cè)服務(wù)實(shí)例(Eureka客戶端-注冊(cè)服務(wù)@EnableEurekaClient)
第三步:創(chuàng)建發(fā)現(xiàn)服務(wù)實(shí)例(Eureka客戶端-發(fā)現(xiàn)服務(wù)@EnableDiscoveryClient)
第四步:實(shí)現(xiàn)發(fā)現(xiàn)服務(wù)實(shí)例調(diào)用注冊(cè)服務(wù)實(shí)例的示例。
?
第一部分:配置Eureka服務(wù)器(注冊(cè)中心)
--注意實(shí)現(xiàn):
1.Eclipse配置SpringCloud必須先安裝好 spring tool suite 插件。否則配置文件沒(méi)有提示??!
2.Spring Cloud框架的jar都是由maven或者gradle構(gòu)建工具獲得的。我們主流使用的是Maven。所以創(chuàng)建的maven項(xiàng)目
第一步:創(chuàng)建一個(gè)maven項(xiàng)目
注意事項(xiàng):必須要勾上Eureka Server選項(xiàng)
--
我們需要將生成好的代碼的pom.xml文件的依賴加入到我們的項(xiàng)目?。。。?!
<project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
??<modelVersion>4.0.0</modelVersion>
??<groupId>cn.gzsxt.springcloud</groupId>
??<artifactId>springcloud-demo-01-eureka</artifactId>
??<version>1.0</version>
??<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.RELEASE</version>
<relativePath/>?<!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- springcloud版本鎖定-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第三步:創(chuàng)建一個(gè)啟動(dòng)類Application
package?cn.gzsxt.springcloud;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public?class?EurekaApplication {
public?static?void?main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
第四步:創(chuàng)建配置文件application.properties
#1.配置端口
server.port=5121
#2.配置eureka主機(jī)名,找到eureka所在的機(jī)器
eureka.instance.hostname=localhost
#3.是否將自身注冊(cè)為服務(wù)false表示不注冊(cè)
eureka.client.register-with-eureka=false
#4.是否主動(dòng)發(fā)現(xiàn)服務(wù)false表示不發(fā)現(xiàn)
eureka.client.fetch-registry=false
#5.對(duì)外提供的注冊(cè)入口
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
第二部分:創(chuàng)建一個(gè)注冊(cè)服務(wù)實(shí)例instanceServer
注意事項(xiàng):實(shí)例使用的是Spring Boot
第一步:創(chuàng)建一個(gè)Maven項(xiàng)目
--注意實(shí)現(xiàn):必須添加webmvc模塊以及Eureka客戶端模塊
--將生成的項(xiàng)目的pom.xml代碼覆蓋項(xiàng)目的pom.xml
<project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
??<modelVersion>4.0.0</modelVersion>
??<groupId>cn.gzsxt.springcloud</groupId>
??<artifactId>springcloud-demo-02-instanceServer01</artifactId>
??<version>1.0</version>
??<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.RELEASE</version>
<relativePath/>?<!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
--Application代碼
package?cn.gzsxt.springcloud;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public?class?InstanceApplication {
public?static?void?main(String[] args) {
SpringApplication.run(InstanceApplication.class, args);
}
}
package?cn.gzsxt.springcloud.controller;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
@RestController
public?class?UserController {
@RequestMapping("/say")
public?String say(){
return?"hello,springcloud";
}
}
第五步:編寫配置文件application.properties
#指定實(shí)例端口
server.port=8080
#指定實(shí)例名,springcloud是通過(guò)實(shí)例名稱來(lái)尋址服務(wù)的
spring.application.name=instanceServer
#指定Eureka服務(wù)端訪問(wèn)路徑
eureka.client.service-url.defaultZone=http://localhost:5121/eureka
--注意事項(xiàng):因?yàn)閷?shí)例是Eureka的客戶端,所以啟動(dòng)實(shí)例之前,必須要先啟動(dòng)Eureka服務(wù)端!
啟動(dòng)Eureka服務(wù)端
--啟動(dòng)Eureka服務(wù)端,啟動(dòng)成功,會(huì)暴露配置文件指定的5121端口
--測(cè)試Eureka服務(wù)端是否成功,在瀏覽器輸入:http://localhost:5121
啟動(dòng)注冊(cè)服務(wù)實(shí)例instanceServer01
--啟動(dòng)成功,會(huì)暴露配置文件指定的8080端口
--通過(guò)Eureka服務(wù)端管理后臺(tái)可以查看客戶端服務(wù)是否注冊(cè)成功
第三部分:創(chuàng)建一個(gè)發(fā)現(xiàn)服務(wù)實(shí)例新實(shí)例(調(diào)用服務(wù))
說(shuō)明:將實(shí)例1復(fù)制一份。修改配置文件,修改為第二個(gè)實(shí)例
第二步:修改appplication.properties配置文件
#指定實(shí)例端口
server.port=8081
#指定實(shí)例名,springcloud是通過(guò)實(shí)例名稱來(lái)尋址服務(wù)的
spring.application.name=instanceClient
#指定Eureka服務(wù)端訪問(wèn)路徑
eureka.client.service-url.defaultZone=http://localhost:5121/eureka
第三步:修改發(fā)現(xiàn)服務(wù)入門程序注解
@SpringBootApplication
//標(biāo)記該項(xiàng)目為一個(gè),該實(shí)例是一個(gè)發(fā)現(xiàn)服務(wù)的實(shí)例
@EnableDiscoveryClient
public?class?Application {
public?static?void?main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
啟動(dòng)實(shí)例2,確定實(shí)例在Eureka服務(wù)端注冊(cè)時(shí)成功的。
--如果啟動(dòng)成功,會(huì)暴露一個(gè)application.xml配置文件指定的訪問(wèn)端口8081
第四部分:實(shí)現(xiàn)instanceClient與instanceServer的遠(yuǎn)程調(diào)用
需求:
(1)在instanceServer中,我們暴露一個(gè)login的遠(yuǎn)程restful接口。
(2)instanceClient調(diào)用該接口。將數(shù)據(jù)傳遞給它。
說(shuō)明:SpringCloud遠(yuǎn)程服務(wù)調(diào)用,有兩種實(shí)現(xiàn)方式:
(1)Ribbon+RestTemplate,基于restful實(shí)現(xiàn)。
其中,Ribbon是一個(gè)基于HTTP和TCP客戶端的負(fù)載均衡器。
(2)Feign
其中,F(xiàn)eign默認(rèn)啟動(dòng)Ribbon負(fù)載均衡。
步驟說(shuō)明:(1)修改注冊(cè)服務(wù)代碼
(2)修改發(fā)現(xiàn)服務(wù)代碼
(3)啟動(dòng)實(shí)例,實(shí)現(xiàn)服務(wù)調(diào)用
(4)負(fù)載均衡實(shí)現(xiàn)。
第一步:修改注冊(cè)服務(wù),注冊(cè)login登陸服務(wù)
(1)創(chuàng)建User類
package?cn.gzsxt.instance.pojo;
import?java.io.Serializable;
public?class?User implements?Serializable{
/**
?*
?*/
private?static?final?long?serialVersionUID?= 7260598142983180828L;
private?Integer id;
private?String username;
private?String password;
//補(bǔ)全get、set方法
}
(2)修改UserController類,新增登錄方法
package?cn.gzsxt.instance.controller;
import?org.springframework.web.bind.annotation.RequestBody;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
import?cn.gzsxt.instance.pojo.User;
@RestController
public?class?UserController {
/**
*用戶登錄?
?* @return
?*/
@RequestMapping(value="/login",method=RequestMethod.POST)
public?String login(@RequestBody?User user){
System.out.println("用戶名:"+user.getUsername()+",密碼:"+user.getPassword());
return?"Ok—intanceServer--8080";
}
}
第二步:修改發(fā)現(xiàn)服務(wù)實(shí)例instanceClient
(1)添加Ribbon依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
(2)修改Application啟動(dòng)類,標(biāo)記該實(shí)例是發(fā)現(xiàn)服務(wù)實(shí)例
//1.用于啟動(dòng)Spring boot項(xiàng)目
@SpringBootApplication
//2.用于標(biāo)識(shí)該項(xiàng)目是一個(gè)Eureka客戶端(發(fā)現(xiàn)服務(wù))
@EnableDiscoveryClient
public?class?Application {
public?static?void?main(String[] args) {
SpringApplication.run(Application.class, args);
}
????//2.創(chuàng)建RestTemplate實(shí)例對(duì)象,用來(lái)遠(yuǎn)程調(diào)用服務(wù)
@Bean
@LoadBalanced
public?RestTemplate restTemplate(){
return?new?RestTemplate();
}
}
(3)創(chuàng)建UserService類
package?cn.gzsxt.instance.service;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Service;
import?org.springframework.web.client.RestTemplate;
import?cn.gzsxt.instance.pojo.User;
@Service
public?class?UserService {
@Autowired
private?RestTemplate restTemplate;
public?String login(User user){
String result?= restTemplate.postForObject("http://instanceServer/login",user,?String.class);
return?result;
}
}
(4)修改UserController類
package?cn.gzsxt.instance.controller;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
import?cn.gzsxt.instance.pojo.User;
import?cn.gzsxt.instance.service.UserService;
@RestController
public?class?UserController {
@Autowired
private?UserService userService;
@RequestMapping("/login")
public?String login(User user){
String result?= userService.login(user);
System.out.println(result);
return?result;
}
}
說(shuō)明:依次啟動(dòng)注冊(cè)中心、服務(wù)提供實(shí)例、服務(wù)發(fā)現(xiàn)實(shí)例。
(1)啟動(dòng)注冊(cè)中心
(2)啟動(dòng)服務(wù)提供者
(4)啟動(dòng)服務(wù)發(fā)現(xiàn)者
(5)訪問(wèn)注冊(cè)中心 http://localhost:5121/eureka
(6)訪問(wèn)服務(wù)發(fā)現(xiàn)實(shí)例
http://localhost:8081/login?username=root&password=123
遠(yuǎn)程服務(wù)調(diào)用成功?。。?/p>
第四步:基于ribbon負(fù)載均衡實(shí)現(xiàn)
負(fù)載均衡概念:在多個(gè)并且相同的服務(wù)可用的情況下,通過(guò)一定的負(fù)載策略,均衡的去調(diào)用這些服務(wù),讓服務(wù)到達(dá)一個(gè)平衡的狀態(tài)。
重用的負(fù)載策略:輪詢、權(quán)重、一致性ip等。
基于ribbon負(fù)載均衡實(shí)現(xiàn)步驟:
(1)創(chuàng)建一個(gè)新的注冊(cè)服務(wù)實(shí)現(xiàn)instanceServer2。(復(fù)制instanceServer即可)
(2)修改instanceServer2的maven坐標(biāo)
<groupId>cn.gzsxt.springcloud</groupId>
??<artifactId>springcloud-demo-04-instanceServer2</artifactId>
??<version>1.0</version>
(3)修改application.properties文件
說(shuō)明:相同的服務(wù),實(shí)例的名稱也相同。
因此只用修改端口即可。
#指定實(shí)例端口
server.port=8082
#指定實(shí)例名
spring.application.name=instanceServer
#指定Eureka服務(wù)端訪問(wèn)路徑
eureka.client.service-url.defaultZone=http://localhost:5121/eureka
(4)修改UserController代碼
@RequestMapping(value="/login",method=RequestMethod.POST)
public?String login(@RequestBody?User user){
System.out.println("用戶名:"+user.getUsername()+",密碼:"+user.getPassword());
return?"Ok—intanceServer02--8082";
}
(5)啟動(dòng)實(shí)例
(6)多次訪問(wèn)登陸接口,查看結(jié)果
基于Feign實(shí)現(xiàn)服務(wù)調(diào)用
說(shuō)明:在入門示例的基礎(chǔ)上,復(fù)制一個(gè)新的發(fā)現(xiàn)服務(wù)實(shí)例instanceClient2。
步驟說(shuō)明:(1)添加Feign客戶端依賴
(2)修改服務(wù)發(fā)現(xiàn)代碼
修改pom.xml文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
說(shuō)明:Feign是基于interface接口來(lái)發(fā)現(xiàn)服務(wù)的。
package?cn.gzsxt.instance.service;
import?org.springframework.cloud.netflix.feign.FeignClient;
import?org.springframework.web.bind.annotation.RequestMapping;
import?cn.gzsxt.instance.pojo.User;
@FeignClient(name="instanceServer")
public?interface?UserService {
@RequestMapping(value="/login")
public?String login(User user);
}
說(shuō)明:添加Feign客戶端支持 ?@EnableFeignClients
package?cn.gzsxt.instance;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import?org.springframework.cloud.netflix.feign.EnableFeignClients;
//1.用于啟動(dòng)Spring boot項(xiàng)目
@SpringBootApplication??
//2.用于標(biāo)識(shí)該項(xiàng)目是一個(gè)Eureka客戶端(發(fā)現(xiàn)服務(wù))
@EnableDiscoveryClient
@EnableFeignClients
public?class?Application {
public?static?void?main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
第四步:?jiǎn)?dòng)instanceClient2
基于Feign遠(yuǎn)程訪問(wèn)成功!??!
在入門示例中,服務(wù)的注冊(cè)、發(fā)現(xiàn)和調(diào)用,都是基于Eureka注冊(cè)中心實(shí)現(xiàn)。
如果Eureka服務(wù)宕機(jī)了,整個(gè)服務(wù)就都不可用了。
解決的辦法:
配置Eureka高可用,即配置多個(gè)Eureka服務(wù)器,當(dāng)只要有一個(gè)Eureka還正常運(yùn)行,就能夠提供正常的服務(wù)。
第一步:先配置一個(gè)完整的Eureka服務(wù)器。
第二步:復(fù)制另外一個(gè)Eureka服務(wù)器。
第三步:修改兩個(gè)Eureka的配置,實(shí)現(xiàn)這兩個(gè)Eureka高可用。
第一步:配置一個(gè)Eureka服務(wù)器。(已實(shí)現(xiàn))
第二步:復(fù)制另外一個(gè)Eureka服務(wù)器
--將第一個(gè)Eureka服務(wù)器復(fù)制一份,修改器配置為第二個(gè)Eureka服務(wù)。
<groupId>cn.gzsxt.springcloud</groupId>
<artifactId>springcloud-demo-01-eureka2</artifactId>
<version>1.0</version>
--修改第二個(gè)Eureka的服務(wù)端口,不要和第一個(gè)沖突。
#1.配置端口
server.port=5122
#2.配置eureka主機(jī)名
eureka.instance.hostname=localhost
#3.由于我們目前創(chuàng)建的應(yīng)用是一個(gè)服務(wù)注冊(cè)中心,而不是普通的應(yīng)用,默認(rèn)情況下,這個(gè)應(yīng)用會(huì)向注冊(cè)中心(也是它自己)注冊(cè)它自己,設(shè)置為false表示禁止這種默認(rèn)行為
eureka.client.register-with-eureka=false
#4.表示不去檢索其他的服務(wù),因?yàn)榉?wù)注冊(cè)中心本身的職責(zé)就是維護(hù)服務(wù)實(shí)例,它也不需要去檢索其他服務(wù)
eureka.client.fetch-registry=false
#5.對(duì)外提供的注冊(cè)入口
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
--注意:兩個(gè)Eureka服務(wù)器,是通過(guò)主機(jī)名和端口來(lái)互相發(fā)現(xiàn)的。
因此配置Eureka高可用,就是在配置主機(jī)名和端口。
?主機(jī)名(eureka.instance.hostname)服務(wù)端口(server.port)
Eureka 1eureka15121
Eureka 2eureka25122
修改第一個(gè)Eureka的application.properties文件
#1.配置端口
server.port=5121
#2.配置eureka主機(jī)名
eureka.instance.hostname=eureka1
#3.由于我們目前創(chuàng)建的應(yīng)用是一個(gè)服務(wù)注冊(cè)中心,而不是普通的應(yīng)用,默認(rèn)情況下,這個(gè)應(yīng)用會(huì)向注冊(cè)中心(也是它自己)注冊(cè)它自己,設(shè)置為false表示禁止這種默認(rèn)行為
eureka.client.register-with-eureka=false
#4.表示不去檢索其他的服務(wù),因?yàn)榉?wù)注冊(cè)中心本身的職責(zé)就是維護(hù)服務(wù)實(shí)例,它也不需要去檢索其他服務(wù)
eureka.client.fetch-registry=false
#5.對(duì)外提供的注冊(cè)入口,關(guān)聯(lián)其它的Eureka2
eureka.client.service-url.defaultZone=http://eureka2:5122/eureka/
修改第二個(gè)Eureka的application.properties文件
#1.配置端口
server.port=5122
#2.配置eureka主機(jī)名
eureka.instance.hostname=eureka2
#3.由于我們目前創(chuàng)建的應(yīng)用是一個(gè)服務(wù)注冊(cè)中心,而不是普通的應(yīng)用,默認(rèn)情況下,這個(gè)應(yīng)用會(huì)向注冊(cè)中心(也是它自己)注冊(cè)它自己,設(shè)置為false表示禁止這種默認(rèn)行為
eureka.client.register-with-eureka=false
#4.表示不去檢索其他的服務(wù),因?yàn)榉?wù)注冊(cè)中心本身的職責(zé)就是維護(hù)服務(wù)實(shí)例,它也不需要去檢索其他服務(wù)
eureka.client.fetch-registry=false
#5.對(duì)外提供的注冊(cè)入口,關(guān)聯(lián)其它的Eureka2
eureka.client.service-url.defaultZone=http://eureka1:5121/eureka/
修改本地hosts文件,注冊(cè)Eureka主機(jī)名
文件位置:C:\Windows\System32\drivers\etc\hosts。(注意:使用管理員身份編輯)
第四步:分別啟動(dòng)兩個(gè)Eureka測(cè)試
--啟動(dòng)Eureka1成功
--啟動(dòng)Eureka2成功
--訪問(wèn)Eureka1控制臺(tái)
--訪問(wèn)Eureka2控制臺(tái)
步驟說(shuō)明:
(1)修改前面的實(shí)例,使用Eureka集群配置。
(2)依次啟動(dòng)前面的實(shí)例。
(3)通過(guò)instanceClient調(diào)用服務(wù)。
(4)關(guān)閉其中一個(gè)Eureka,觀察是否任然可以調(diào)用成功。
(5)如果任然可用,則Eureka高可用配置成功。
修改實(shí)例instanceServer的application.properties文件
#指定實(shí)例名
spring.application.name=instanceServer
#指定Eureka服務(wù)端訪問(wèn)路徑,多個(gè)Eureka使用逗號(hào)隔開
eureka.client.service-url.defaultZone=http://eureka1:5121/eureka,?http://eureka2:5122/eureka
#指定實(shí)例端口
server.port=8080
修改實(shí)例instanceClient的application.properties文件
#指定實(shí)例名
spring.application.name=instanceClient
#指定Eureka服務(wù)端訪問(wèn)路徑,多個(gè)Eureka使用逗號(hào)隔開
eureka.client.service-url.defaultZone=http://eureka1:5121/eureka,?http://eureka2:5122/eureka
#指定實(shí)例端口
server.port=8081
修改實(shí)例instanceServer2的application.properties文件
#指定實(shí)例名
spring.application.name=instanceServer
#指定Eureka服務(wù)端訪問(wèn)路徑,多個(gè)Eureka使用逗號(hào)隔開
eureka.client.service-url.defaultZone=http://eureka1:5121/eureka,?http://eureka2:5122/eureka
#指定實(shí)例端口
server.port=8082
依次啟動(dòng)這三個(gè)實(shí)例
--啟動(dòng)實(shí)例instanceServer成功
--啟動(dòng)實(shí)例instanceClient成功
--啟動(dòng)實(shí)例instanceServer2成功
測(cè)試實(shí)例2調(diào)用遠(yuǎn)程服務(wù)
--測(cè)試成功。
--關(guān)閉Eureka1
--重新訪問(wèn)實(shí)例2
--測(cè)試成功。高可用配置成功?。?!
說(shuō)明:訪問(wèn)Eureka時(shí),需要指定用戶名、密碼進(jìn)行身份認(rèn)證。
配置步驟說(shuō)明:(1)在Eureka服務(wù)端,開啟安全認(rèn)證
(2)在Eureka客戶端,進(jìn)行身份認(rèn)證
第一部分:在Eureka服務(wù)端開啟身份認(rèn)證
第一步:添加身份認(rèn)證依賴
--修改pom.xml文件
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-security</artifactId>
</dependency>
--在Eureka服務(wù)端,修改application.properties文件,指定用戶名、密碼
#配置Eureka安全認(rèn)證
security.basic.enabled=true
security.user.name=root
security.user.password=gzsxt
說(shuō)明:如果配置了Eureka高可用,Eureka之間相互訪問(wèn)時(shí),需認(rèn)證身份。
#1.配置端口
server.port=5121
#2.配置eureka主機(jī)名
eureka.instance.hostname=eureka1
#3.是否將自身注冊(cè)為服務(wù) false表示不注冊(cè)
eureka.client.register-with-eureka=false
#4.是否主動(dòng)發(fā)現(xiàn)服務(wù) ?false表示不發(fā)現(xiàn)
eureka.client.fetch-registry=false
#5.對(duì)外提供的注冊(cè)入口
eureka.client.service-url.defaultZone=http://root:gzsxt@eureka2:5122/eureka/
#配置Eureka安全認(rèn)證
security.basic.enabled=true
security.user.name=root
security.user.password=gzsxt
第二部分:在Eureka客戶端進(jìn)行身份認(rèn)證
--在服務(wù)系統(tǒng)中,修改application.properties文件,進(jìn)行身份認(rèn)證
#指定Eureka服務(wù)端訪問(wèn)路徑
eureka.client.service-url.defaultZone=http://root:gzsxt@eureka1:5121/eureka,http://root:gzsxt@eureka2:5122/eureka