SpringCloud 學習筆記01 服務注冊與發現
一、Spring Cloud簡介
二、創建服務注冊中心
采用Eureka作為服務注冊與發現的組件
首先創建一個maven主工程 兩個子工程一個model工程作為服務注冊中心,即Eureka Server,另一個作為Eureka Client。
在其父pom文件引入依賴,spring Boot版本為2.1.5.RELEASE,Spring Cloud版本為Greenwich.RELEASE。后面同系列文章其父pom文件與其保持一致。
父pom文件起到依賴版本控制的作用,其他module工程繼承該pom。
<?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.xdarker</groupId>
<artifactId>sc-demo1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>sc-demo1</name>
<modules>
<module>eureka-server</module>
<module>service-hi</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<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>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--只是對版本進行管理,不會實際引入jar-->
<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 Server pom.xml繼承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依賴
<?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">
<parent>
<artifactId>sc-demo1</artifactId>
<groupId>com.xdarker</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>eureka-server</artifactId>
<packaging>jar</packaging>
<name>eureka-server</name>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
啟動一個服務注冊中心,只需要一個注解@EnableEurekaServer,這個注解需要在springboot工程的啟動application類上加:
package com.xdarker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Hello world!
*
*/
@SpringBootApplication
//啟動一個服務注冊中心
@EnableEurekaServer
public class EurekaServerApplication
{
public static void main( String[] args )
{
SpringApplication.run(EurekaServerApplication.class,args);
}
}
eureka server的配置文件appication.yml:
eureka:
client:
#此客戶端是否獲取eureka服務器注冊表上的注冊信息,默認為true
fetch-registry: false
#實例是否在eureka服務器上注冊自己的信息以提供其他服務發現,默認為true
register-with-eureka: false
instance:
hostname: localhost
server:
port: 11000
spring:
application:
name: eureka-server
eureka server 是有界面的,啟動工程,打開瀏覽器訪問:http://localhost:11000,界面如下:
三、創建一個服務提供者 (eureka client)
pom文件如下:
<?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">
<parent>
<artifactId>sc-demo1</artifactId>
<groupId>com.xdarker</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-hi</artifactId>
<packaging>jar</packaging>
<name>service-hi</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
通過注解@EnableDiscoveryClient 表明自己是一個eurekaclient
package com.xdarker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Hello world!
*
*/
@SpringBootApplication
@EnableDiscoveryClient
//@EnableDiscoveryClient和@EnableEurekaClient共同點就是:都是能夠讓注冊中心能夠發現,掃描到改服務。
//不同點:@EnableEurekaClient只適用于Eureka作為注冊中心,@EnableDiscoveryClient 可以是其他注冊中心。
public class Application
{
public static void main( String[] args )
{
SpringApplication.run(Application.class,args);
}
}
Controller類
package com.xdarker.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 文件名稱:ServiceHiController
* 本類描述:
* 日期:2019/5/27 11:16
*
* @author XDrker
* @version 1.0
*/
@RestController
public class ServiceHiController {
@Value("${server.port}")
String port;
@GetMapping("/hi")
public String home(@RequestParam(value = "name") String name) {
return "hi " + name + " ,i am from port:" + port;
}
}
在配置文件中注明自己的服務注冊中心的地址,application.yml配置文件如下:
eureka:
client:
serviceUrl:
# eureka.client.serviceUrl.defaultZone屬性對應服務注冊中心的配置內容,指定服務注冊中心的位置
defaultZone: http://localhost:11000/eureka/
server:
port: 12001
spring:
application:
name: service-hi
需要指明spring.application.name,這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個name 。
啟動工程,打開http://localhost:12001 ,即eureka server 的網址:
你會發現一個服務已經注冊在服務中了,服務名為SERVICE-HI ,端口為12001
這時打開 http://localhost:8762/hi?name=XDrker ,你會在瀏覽器上看到 :
問題:將客戶端關閉后,再次打開Eureka的注冊頁面,發現有一串紅字:
Eureka的自我保護模式
默認情況下,如果EurekaServer在一定時間內沒有接收到某個微服務實例的心跳時,EurekaServer將會注銷該實例(默認90s)。但是當網絡發生故障時,微服務與EurekaServer之間無法通信,這樣就會很危險了,因為微服務本身是很健康的,此時就不應該注銷這個微服務,而Eureka通過自我保護機制來預防這種情況,當網絡健康后,該EurekaServer節點就會自動退出自我保護模式;
這時再次將客戶端微服務啟動,刷新服務注冊中心會發現,自我保護狀態已取消。
參考博客:方志朋
智能推薦
SpringCloud學習-(2)服務的注冊與發現(Eureka)
前面SpringBoot已經介紹了SpringBoot相關使用,如果對SpringBoot不了解可以先看一下。 1.SpringCloud介紹 SpringCloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等,運行環境簡單。SpringCloud是基于SpringBoot的。 2.創建服務注冊中心 在這里...
SpringCloud學習教程一( 服務的注冊與發現 Eureka)
本文是根據方志明的springCloud學習教程進行個人細化,記錄個人學習的教程可能會做一些小的修改讓文章更便于理解, 原著參考案例全部采用Spring Boot 1.5.x ,Spring Cloud版本為Dalston.RELEASE 一、spring cloud簡介 spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線...
Springcloud學習之路------------Eureka服務注冊與發現
建立eureka服務端 一、建model 如:cloud-eureka-server7001 二、改pom 添加依賴eureka-server 表示這是一個eureka服務端 三、改配置 集群板eureka: 就是把defaultZone 指向其他eureka的hostname ,如果有多個則用逗號隔開。 單機版eureka: 就是指向自己的hostname 四、主啟動 在主啟動上加入@Enabl...
springCloud學習【一】:服務的注冊發現與消費【實例】
springCloud之微服務的注冊發現與消費 `個人學習記錄而已,沒事就回來看看,給自己漲記性` 準備:新建一個空的maven項目用來當父項目【CloudDemo】我就是拿他當個根目錄而已 一、項目準備:CloudDemo僅當作父項目使用【各個項目的根目錄而已】 二、創建注冊中心模塊`cloud-registry` *SpringBoot項目* 三、注冊中心的配置【yml格式】 四、搞定,注冊中...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...