SpringCloud

SpringCloud概述

基于SOA系統(tǒng)架構(gòu)

面向服務(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)的思想。




Spring Cloud的作用

問(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))!


為什么要學(xué)習(xí)Springcloud?

Springcloud是提供了一整套企業(yè)級(jí)分布式云應(yīng)用的完美解決方案,能夠結(jié)合Spring Boot、Spring其它組件,實(shí)現(xiàn)快速開發(fā)的目的。

企業(yè)級(jí)開發(fā)越來(lái)越傾向Spring生態(tài)體系。當(dāng)然也包括SpringCloud了。


如何學(xué)習(xí)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)目



第二步:在Spring官方網(wǎng)站,生成代碼

地址為:https://start.spring.io/


注意事項(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/

?第五步:?jiǎn)?dòng)程序測(cè)試

第二部分:創(chuàng)建一個(gè)注冊(cè)服務(wù)實(shí)例instanceServer

注意事項(xiàng):實(shí)例使用的是Spring Boot

第一步:創(chuàng)建一個(gè)Maven項(xiàng)目

第二步:生成Spring boot項(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入口類



--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);

}

}


第四步編寫一個(gè)Controller類

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


第六步:?jiǎn)?dòng)實(shí)例

--注意事項(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í)例

第一步:修改pom.xml配置文件的項(xiàng)目名

第二步:修改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);

}

}


第四步:?jiǎn)?dòng)實(shí)例

啟動(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;

}

}



第三步:?jiǎn)?dòng)實(shí)例

說(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)代碼


第一步:添加Feign依賴

修改pom.xml文件


<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-feign</artifactId>

</dependency>


第二步:修改UserService

說(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);


}


第三步:修改啟動(dòng)類Application

說(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)成功!??!


Eureka高可用配置

入門示例存在的缺陷

在入門示例中,服務(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ù)。


修改pom.xml中的Eureka服務(wù)名

<groupId>cn.gzsxt.springcloud</groupId>

<artifactId>springcloud-demo-01-eureka2</artifactId>

<version>1.0</version>


修改application.properties配置文件

--修改第二個(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高可用(通訊)

--注意:兩個(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)



第五步:測(cè)試Eureka高可用

步驟說(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è)試成功。


測(cè)試Eureka高可用

--關(guān)閉Eureka1



--重新訪問(wèn)實(shí)例2



--測(cè)試成功。高可用配置成功?。?!


Eureka安全認(rèn)證

說(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>

第二步:開啟身份認(rèn)證

--在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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、服務(wù)注冊(cè)與發(fā)現(xiàn) 這里會(huì)用到Spring Cloud Netflix,該項(xiàng)目是Spring Cloud的子項(xiàng)目之...
    小明同學(xué)呀呀呀閱讀 1,778評(píng)論 0 2
  • 大綱 注冊(cè)中心功能服務(wù)one功能服務(wù)two 整體目錄結(jié)構(gòu)如下整體目錄結(jié)構(gòu)這里整個(gè)功能是一個(gè)maven項(xiàng)目,注冊(cè)中心...
    一名程序猿閱讀 1,445評(píng)論 0 4
  • 之所以進(jìn)行eureka集群的搭建,在于我們平時(shí)的生產(chǎn)環(huán)境中,很難保證單節(jié)點(diǎn)的eureka服務(wù)能提供百分百不間斷的服...
    yhs007閱讀 415評(píng)論 0 0
  • 最近一直在讀花婆婆方素珍的書《創(chuàng)意玩繪本》,里面講述了她是如何結(jié)緣繪本,如何開始了繪本翻譯,如何創(chuàng)作一本繪本的故事...
    穆建園閱讀 261評(píng)論 1 0
  • 熬夜壓力大 環(huán)境惡可怕 食品欠安全 運(yùn)動(dòng)少最大 遠(yuǎn)離癌魔多運(yùn)動(dòng) 正常飲食心路通 注重環(huán)境體不痛 減輕壓力神放松
    旖旎i閱讀 642評(píng)論 7 16

友情鏈接更多精彩內(nèi)容