在Idea裏,新建項目,選擇Spring initializer.java
下面的pomweb
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置properties文件參數;spring
server.port=8882 #域名 eureka.instance.hostname=localhost #禁用 Eureka的客戶端註冊行爲 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false #eureka註冊中心服務地址 eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
在啓動類上添加註解@EnableEurekaServerapi
// @EnableEurekaServer 表明啓動註冊服務中心 @EnableEurekaServer @SpringBootApplication public class SpringCloundEurekaDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloundEurekaDemoApplication.class, args); } }
啓動項目,打開鏈接 http://localhost:8882安全
Eureka Client
,負責將所提供的服務向Eureka Server
進行註冊、續約和註銷等操做。註冊時所提供的主要數據包括服務名、機器ip、端口號、域名等,從而可以使服務消費方可以找到Eureka服務器咱們已經編寫好了,接下來咱們就能夠編寫一個Eureka的客戶端了。這個客戶端多是一個服務提供者,也多是一個服務消費者,甚至二者都是。服務器
咱們先編寫一個簡單的Eureka Client網絡
在Idea裏,新建項目,選擇Spring initializ.架構
下面的pomapp
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置yml文件參數;(換下配置方式)spring-boot
eureka: client: serviceUrl: defaultZone: http://localhost:8882/eureka/ server: port: 8883 spring: application: name: service-hello
在啓動類上添加註解@EnableEurekaClient
// @ EnableEurekaClient 表示申明本身是一個發服務提供者; @EnableEurekaClient @SpringBootApplication public class SpringCloundEurekaClientExampleApplication { public static void main(String[] args) { SpringApplication.run(SpringCloundEurekaClientExampleApplication.class, args); } }
建立conroller
@RestController public class HelloController { @Value("${server.port}") String port; @Value("${spring.application.name}") String name; @RequestMapping("/index") public String index() { return "服務提供者client:" + name + "服務端口:" + port; } }
啓動項目
而後咱們再來看一下服務註冊中心;就會看到,已經註冊了一個服務提供者;
咱們將client的配置文件屬性註冊的端口改成8884;;而後在IDEA把該服務再啓動一個實例
(把single instance only勾選去掉)
回到服務中心,已經有兩個client了
此外
Spring Cloud實現心跳監測,在服務註冊和中止時,註冊中心能獲得通知,並更新服務實例列表
(一)Spring Cloud註冊中心添加配置:
eureka.server.enable-self-preservation=false
默認狀況下,若是Eureka Server在必定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會註銷該實例(默認90秒)。可是當網絡分區故障發生時,微服務與Eureka Server之間沒法正常通訊,以上行爲可能變得很是危險了——由於微服務自己實際上是健康的,此時本不該該註銷這個微服務。
Eureka經過「自我保護模式」來解決這個問題——當Eureka Server節點在短期內丟失過多客戶端時(可能發生了網絡分區故障),那麼這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務註冊表中的信息,再也不刪除服務註冊表中的數據(也就是不會註銷任何微服務)。當網絡故障恢復後,該Eureka Server節點會自動退出自我保護模式。
綜上,自我保護模式是一種應對網絡異常的安全保護措施。它的架構哲學是寧肯同時保留全部微服務(健康的微服務和不健康的微服務都會保留),也不盲目註銷任何健康的微服務。使用自我保護模式,可讓Eureka集羣更加的健壯、穩定。
eureka server清理無效節點的時間間隔,默認60000毫秒,即60秒
(二)Spring Cloud服務提供者添加配置:
eureka.instance.lease-renewal-interval-in-seconds=5 eureka.instance.lease-expiration-duration-in-seconds=5
表示eureka client間隔多久去拉取服務註冊信息,默認爲30秒,對於api-gateway,若是要迅速獲取服務註冊狀態,能夠縮小該值,好比5秒
leaseExpirationDurationInSeconds,表示eureka server至上一次收到client的心跳以後,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance。
leaseRenewalIntervalInSeconds,表示eureka client發送心跳給server端的頻率。若是在leaseExpirationDurationInSeconds後,server端沒有收到client的心跳,則將摘除該instance。除此以外,若是該instance實現了HealthCheckCallback,並決定讓本身unavailable的話,則該instance也不會接收到流量。
所屬文章參考:https://www.jianshu.com/u/8f959a9cbc66。https://blog.csdn.net/qq_41377914/article/category/7719803