摘自:https://www.cnblogs.com/lori/p/10615654.html (完整)
springcloud~服務注冊與發現Eureka的使用
服務注冊與發現是微服務里的概念,也是一個基本的組件,負責服務組件的認證,即實現『你是誰』的功能,在服務注冊與發現里,存在兩種模式,即服務端發現和客戶端發現,咱們今天說的eureka屬於客戶端發現!
下面概念來自文章:https://blog.csdn.net/forezp/article/details/73017664
下面看幾個服務注冊與發現的基本概念:
-
Register:服務注冊
當Eureka客戶端向Eureka Server注冊時,它提供自身的元數據,比如IP地址、端口,運行狀況指示符URL,主頁等。 -
Renew:服務續約
Eureka客戶會每隔30秒發送一次心跳來續約。 通過續約來告知Eureka Server該Eureka客戶仍然存在,沒有出現問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將實例從其注冊表中刪除。 建議不要更改續約間隔。 -
Fetch Registries:獲取注冊列表信息
Eureka客戶端從服務器獲取注冊表信息,並將其緩存在本地。客戶端會使用該信息查找其他服務,從而進行遠程調用。該注冊列表信息定期(每30秒鍾)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同, Eureka客戶端自動處理。如果由於某種原因導致注冊列表信息不能及時匹配,Eureka客戶端則會重新獲取整個注冊表信息。 Eureka服務器緩存注冊列表信息,整個注冊表以及每個應用程序的信息進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka客戶端和Eureka 服務器可以使用JSON / XML格式進行通訊。在默認的情況下Eureka客戶端使用壓縮JSON格式來獲取注冊列表的信息。 -
Cancel:服務下線
Eureka客戶端在程序關閉時向Eureka服務器發送取消請求。 發送請求后,該客戶端實例信息將從服務器的實例注冊表中刪除。該下線請求不會自動完成,它需要調用以下內容:
DiscoveryManager.getInstance().shutdownComponent(); -
Eviction 服務剔除
在默認的情況下,當Eureka客戶端連續90秒沒有向Eureka服務器發送服務續約,即心跳,Eureka服務器會將該服務實例從服務注冊列表刪除,即服務剔除。
大叔演示服務發現與注冊的環境:
- intellij idea開發工具
- gradle4.6構建工具
- java1.8運行時
- springboot腳手架
Eureka Server端的實現:
依靠包
dependencies { compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server') testCompile('org.springframework.boot:spring-boot-starter-test') }
配置項
server.port: 8761 management.port: 8762 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://localhost:8761/eureka/
啟動代碼
@EnableEurekaServer @EnableDiscoveryClient @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
訪問:http://localhost:8761/
Eureka Client端的加入:
服務端啟動后,它里面的應用是空的,這時我們添加一個客戶端,注意,這里的客戶端是指Eureka的,它可能對於其它服務來說,是個服務端,為其它接口提供數據的,這是有可能的。(我這個客戶端同時引用了配置中心的概念,它也是配置中心的使用端,這個項目的配置文件通過配置中心來統一進行分布式管理)
依賴包
dependencies { compile('org.springframework.boot:spring-boot-starter-web', 'org.springframework.cloud:spring-cloud-starter-config', 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server') testCompile('org.springframework.boot:spring-boot-starter-test') }
配置項
spring: application: name: email-client cloud: config: uri: http://localhost:8200 server: port: 8300 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
啟動代碼
@EnableEurekaClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
我們啟動它之后,去eureka server界面去查看, http://localhost:8761,你會發現,我們的服務出現在了服務列表里!