一、小記java
這段時間有空,把springcloud的知識整理一下,好記性不如爛筆頭,也讓本身對springcloud有個清晰的認識。這次的整理記錄主要借鑑了這位大佬的博客 https://blog.csdn.net/forezp,特此感謝。web
此次學習的環境,使用idea+jdk8,springboot基於2.0.3版本spring
二、spring cloud簡介apache
spring cloud 爲開發人員提供了快速構建分佈式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等。後端
三、建立Maven主工程瀏覽器
建立成功以後,刪除src目錄,pom.xml引入依賴,其它module工程繼承該pom.xml,避免重複引入,pom.xml文件以下緩存
<?xml version="1.0" encoding="UTF-8"?> <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>com.study</groupId> <artifactId>cloud</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent> <modules> <module>eureka-server</module> <module>eureka-client</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <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>
四、eureka簡介springboot
4.一、服務的註冊與發現圖例服務器
4.二、簡介app
Eureka是Spring Cloud Netflix微服務套件中的一部分,能夠與Springboot構建的微服務很容易的整合起來。
Eureka包含了服務器端和客戶端組件。服務器端,也被稱做是服務註冊中心,用於提供服務的註冊與發現。Eureka支持高可用的配置,當集羣中有分片出現故障時,Eureka就會轉入自動保護模式,它容許分片故障期間繼續提供服務的發現和註冊,
當故障分片恢復正常時,集羣中其餘分片會把他們的狀態再次同步回來。集羣中的的不一樣服務註冊中心經過異步模式互相複製各自的狀態,這也意味着在給定的時間點每一個實例關於全部服務的狀態可能存在不一致的現象。
客戶端組件包含服務消費者與服務生產者。在應用程序運行時,Eureka客戶端向註冊中心註冊自身提供的服務並週期性的發送心跳來更新它的服務租約。同時也能夠從服務端查詢當前註冊的服務信息並把他們緩存到本地並週期性的刷新服務狀態。
五、建立model工程eureka-server做爲服務註冊中心、eureka-client做爲服務提供者
右鍵工程->建立model-> 選擇spring initialir 以下圖:
下一步->選擇cloud discovery->eureka server ,而後一直下一步就好了。
建立完成後,修改pom.xml文件依賴cloud父工程pom.xml文件,刪除重複依賴,pom.xml文件以下
<?xml version="1.0" encoding="UTF-8"?> <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>com.study</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.study</groupId> <artifactId>cloud</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
只須要一個註解@EnableEurekaServer,這個註解須要在springboot工程的啓動application類上加:
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
eureka是一個高可用的組件,它沒有後端緩存,每個實例註冊以後須要向註冊中心發送心跳(所以能夠在內存中完成),
在默認狀況下erureka server也是一個eureka client ,必需要指定一個 server。eureka server的配置文件appication.yml,yml最大的好處在於其擁有自然的樹狀結構:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eurka-server
經過eureka.client.registerWithEureka:false和fetchRegistry:false來代表本身是一個eureka server.
啓動工程,打開瀏覽器訪問: http://localhost:8761 ,界面以下:
No instances available 表示沒有服務被發現
六、建立服務提供者eureka-client
當client向server註冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。服務註冊在Eureka上而且每30秒發送心跳來續租。若是一個客戶端在3次內沒有刷新心跳,它將在大約90秒內被移出服務器註冊表。
註冊信息和更新信息會在整個eureka集羣的節點進行復制。任何分區的客戶端均可查找註冊中心信息(每30秒發生一次)來定位他們的服務(可能會在任何分區)並進行遠程調用。
建立過程同server相似,建立完pom.xml以下:
<?xml version="1.0" encoding="UTF-8"?> <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>com.study</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.study</groupId> <artifactId>cloud</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <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-web</artifactId> </dependency> </dependencies> </project>
經過註解@EnableEurekaClient 代表本身是一個eurekaclient.
@RestController @EnableEurekaClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } @Value("${server.port}") String port; @RequestMapping("/hi") public String home(@RequestParam(value = "name", defaultValue = "study") String name) { return "hi " + name + " ,i am from port:" + port; } }
在配置文件中配置本身的服務註冊中心地址,定義當前服務的名稱。
server:
port: 8762
spring:
application:
name: service-hi
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
啓動工程,刷新http://localhost:8761 地址,服務名爲SERVICE-HI ,端口爲7862的服務已經註冊到服務列表中了
打開 http://localhost:8762/hi?name=study ,你會在瀏覽器上看到 :
hi study ,i am from port:8762