從淺入深 學(xué)習(xí) SpringCloud 微服務(wù)架構(gòu)(三)注冊(cè)中心 Eureka(3)
段子手168
1、eureka:高可用的引入
Eureka Server 可以通過運(yùn)行多個(gè)實(shí)例并相互注冊(cè)的方式實(shí)現(xiàn)高可用部署,
Eureka Server 實(shí)例會(huì)彼此增量地同步信息,從而確保所有節(jié)點(diǎn)數(shù)據(jù)一致。
事實(shí)上,節(jié)點(diǎn)之間相互注冊(cè)是 Eureka Server 的默認(rèn)行為。
2、eurekaServer 高可用:server 間的相互注冊(cè)
1)修改 eureka_server 子工程(子模塊)中的 application.yml 文件
模擬兩個(gè) EurekaServer, 一個(gè)端口 9000,一個(gè)端口 8000,兩個(gè)需要相互注冊(cè)。
## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml
# 模擬兩個(gè) EurekaServer, 一個(gè)端口 9000,一個(gè)端口 8000,兩個(gè)需要相互注冊(cè)。
server:
port: 9000 # 啟動(dòng)端口 命令行注入。
spring:
application:
name: service-eureka #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
eureka: # 配置 eureka_server
# instance:
# hostname: localhost
client:
# register-with-eureka: false # 是否將自己注冊(cè)到注冊(cè)中心,不配置時(shí),默認(rèn) true
# fetch-registry: false # 是否從 Eureka 中獲取注冊(cè)信息,不配置時(shí),默認(rèn) true
service-url: # 配置暴露給 EurekaClient 的請(qǐng)求地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://127.0.0.1:8000/eureka/
## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml
# 模擬兩個(gè) EurekaServer, 一個(gè)端口 9000,一個(gè)端口 8000,兩個(gè)需要相互注冊(cè)。
server:
port: 8000 # 啟動(dòng)端口 命令行注入。
spring:
application:
name: service-eureka #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
eureka: # 配置 eureka_server
# instance:
# hostname: localhost
client:
# register-with-eureka: false # 是否將自己注冊(cè)到注冊(cè)中心,不配置時(shí),默認(rèn) true
# fetch-registry: false # 是否從 Eureka 中獲取注冊(cè)信息,不配置時(shí),默認(rèn) true
service-url: # 配置暴露給 EurekaClient 的請(qǐng)求地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://127.0.0.1:9000/eureka/
2)打開 idea 的 【Run Dashboard】 運(yùn)行儀表面板。
復(fù)制一個(gè) EurekaServerApplication.java 啟動(dòng)類,命名為:EurekaServerApplication(1)
注意:
如果在 idea 中找不到 【Run Dashboard】 運(yùn)行儀表面板,可以看如下文章:
# IDEA2019 如何打開 Run Dashboard 運(yùn)行儀表面板
3)運(yùn)行 2個(gè) 啟動(dòng)類(urekaServerApplication,urekaServerApplication(1) ),進(jìn)行測(cè)試
瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
瀏覽器地址欄輸入:http://localhost:8000 輸出界面如下:
3、eurekaServer 高可用:服務(wù)注冊(cè)到多個(gè) eurekaserver
1)運(yùn)行 order_service, product_service 子工程的 啟動(dòng)類,
瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
瀏覽器地址欄輸入:http://localhost:8000 輸出界面如下:
2)修改 product_service 子工程的 application.yml 文件,
添加 注冊(cè)到多個(gè) eurekaserver 服務(wù) 配置。
## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.yml
server:
port: 9001 # 啟動(dòng)端口 命令行注入。
# port: ${port:56010} # 啟動(dòng)端口設(shè)置為動(dòng)態(tài)傳參,如果未傳參數(shù),默認(rèn)端口為 56010
# servlet:
# context-path: /application1
spring:
application:
name: service-product #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
# main:
# allow-bean-definition-overriding: true # SpringBoot2.1 需要設(shè)定。
datasource:
driver-class-name: com.mysql.jdbc.Driver # mysql 驅(qū)動(dòng)
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 12311
jpa:
database: MySQL
show-sql: true
open-in-view: true
eureka: # 配置 Eureka
client:
service-url:
defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/ # 多個(gè) eurekaserver 用 , 隔開。
instance:
prefer-ip-address: true # 使用 ip 地址注冊(cè)
3)修改 order_service 子工程的 application.yml 文件,
添加 注冊(cè)到多個(gè) eurekaserver 服務(wù) 配置。
## C:\java-test\idea2019\spring_cloud_demo\order_service\src\main\resources\application.yml
server:
port: 9002 # 啟動(dòng)端口 命令行注入。
# port: ${port:9002} # 啟動(dòng)端口設(shè)置為動(dòng)態(tài)傳參,如果未傳參數(shù),默認(rèn)端口為 9002
# servlet:
# context-path: /application1
spring:
application:
name: service-order #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
# main:
# allow-bean-definition-overriding: true # SpringBoot2.1 需要設(shè)定。
datasource:
driver-class-name: com.mysql.jdbc.Driver # mysql 驅(qū)動(dòng)
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 12311
jpa:
database: MySQL
show-sql: true
open-in-view: true
eureka: # 配置 Eureka
client:
service-url:
defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/ # 多個(gè) eurekaserver 用 , 隔開。
instance:
prefer-ip-address: true # 使用 ip 地址注冊(cè)
4)再次運(yùn)行 order_service, product_service, EurekaServerApplication,EurekaServerApplication(1)
可以宕機(jī) EurekaServerApplication,測(cè)試 其他運(yùn)行是否正常,有無影響。
瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
瀏覽器地址欄輸入:http://localhost:8000 輸出界面如下:
瀏覽器地址欄輸入:http://localhost:9001/product/1 輸出界面如下:
瀏覽器地址欄輸入:http://localhost:9002/order/buy/1 輸出界面如下:
4、eurekaServer 高可用:顯示 IP 與服務(wù)續(xù)約時(shí)間設(shè)置
1)修改 eureka_service 子工程的 application.yml 文件,
取消配置高可用 EurekaServer 服務(wù)。
## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml
# 模擬兩個(gè) EurekaServer, 一個(gè)端口 9000,一個(gè)端口 8000,兩個(gè)需要相互注冊(cè)。
server:
port: 9000 # 啟動(dòng)端口 命令行注入。
spring:
application:
name: service-eureka #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
eureka: # 配置 eureka_server
# instance:
# hostname: localhost
client:
register-with-eureka: false # 是否將自己注冊(cè)到注冊(cè)中心,不配置時(shí),默認(rèn) true。 配置高可用時(shí),須注銷此行,或配置為 true
fetch-registry: false # 是否從 Eureka 中獲取注冊(cè)信息,不配置時(shí),默認(rèn) true。 配置高可用時(shí),須注銷此行,或配置為 true
service-url: # 配置暴露給 EurekaClient 的請(qǐng)求地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://127.0.0.1:9000/eureka/ # 配置高可用時(shí),須配置為另一個(gè) EurekaServerApplication 的端口號(hào),如:8000
2)修改 product_service 子工程的 application.yml 文件,
添加 在服務(wù)提供者通過 eureka.instance.instance-id 配置,在控制臺(tái)顯示服務(wù) IP 地址。
## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.yml
server:
port: 9001 # 啟動(dòng)端口 命令行注入。
# port: ${port:56010} # 啟動(dòng)端口設(shè)置為動(dòng)態(tài)傳參,如果未傳參數(shù),默認(rèn)端口為 56010
# servlet:
# context-path: /application1
spring:
application:
name: service-product #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
# main:
# allow-bean-definition-overriding: true # SpringBoot2.1 需要設(shè)定。
datasource:
driver-class-name: com.mysql.jdbc.Driver # mysql 驅(qū)動(dòng)
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 12311
jpa:
database: MySQL
show-sql: true
open-in-view: true
eureka: # 配置 Eureka
client:
service-url:
defaultZone: http://localhost:9000/eureka/
# defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/ # 高可用,注冊(cè)多個(gè) eurekaserver 用 , 隔開。
instance:
prefer-ip-address: true # 使用 ip 地址注冊(cè)
instance-id: ${spring.cloud.client.ip-address}:${server.port} # 向注冊(cè)中心注冊(cè)服務(wù)的id(IP 地址)。
3)再次運(yùn)行 product_service, EurekaServerApplication(1) 測(cè)試
瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
4)修改 product_service 子工程的 application.yml 文件,
添加 心跳間隔和續(xù)約時(shí)間 配置。
## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.yml
server:
port: 9001 # 啟動(dòng)端口 命令行注入。
# port: ${port:56010} # 啟動(dòng)端口設(shè)置為動(dòng)態(tài)傳參,如果未傳參數(shù),默認(rèn)端口為 56010
# servlet:
# context-path: /application1
spring:
application:
name: service-product #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
# main:
# allow-bean-definition-overriding: true # SpringBoot2.1 需要設(shè)定。
datasource:
driver-class-name: com.mysql.jdbc.Driver # mysql 驅(qū)動(dòng)
# url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 12311
jpa:
database: MySQL
show-sql: true
open-in-view: true
eureka: # 配置 Eureka
client:
service-url:
defaultZone: http://localhost:9000/eureka/
# defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/ # 高可用,注冊(cè)多個(gè) eurekaserver 用 , 隔開。
instance:
prefer-ip-address: true # 使用 ip 地址注冊(cè)
instance-id: ${spring.cloud.client.ip-address}:${server.port} # 向注冊(cè)中心注冊(cè)服務(wù)的id(IP 地址)。
lease-renewal-interval-in-seconds: 10 # 設(shè)置向注冊(cè)中心每10秒發(fā)送一次心跳,告訴注冊(cè)中心此服務(wù)沒有巖機(jī),此參數(shù)默認(rèn)是30秒。
lease-expiration-duration-in-seconds: 20 # 設(shè)置每20秒如果注冊(cè)中心沒收到此服務(wù)的心跳,就認(rèn)為此服務(wù)巖機(jī)了,此參數(shù)默認(rèn)是90秒。
3)再次運(yùn)行 product_service, EurekaServerApplication(1) 測(cè)試
瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
如果把 product_service 子工程的 啟動(dòng)類停掉,再次刷新網(wǎng)頁查看,
只有幾十秒,Eureka 上就沒有了 product_service 服務(wù)。
5、eurekaServer高可用:自我保護(hù)機(jī)制
1)EurekaServer 默認(rèn)是開啟 自我保護(hù)機(jī)制的,這樣會(huì)在服務(wù)的控制臺(tái)界面顯示紅色字體,
如下界面:
2)修改 eureka_service 子工程的 application.yml 文件,
配置 關(guān)閉自我保護(hù)機(jī)制功能 和 剔除服務(wù)間隔。
## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml
# 模擬兩個(gè) EurekaServer, 一個(gè)端口 9000,一個(gè)端口 8000,兩個(gè)需要相互注冊(cè)。
server:
port: 9000 # 啟動(dòng)端口 命令行注入。
spring:
application:
name: service-eureka #spring應(yīng)用名, # 注意 FeignClient 不支持名字帶下劃線
eureka: # 配置 eureka_server
# instance:
# hostname: localhost
client:
register-with-eureka: false # 是否將自己注冊(cè)到注冊(cè)中心,不配置時(shí),默認(rèn) true。 配置高可用時(shí),須注銷此行,或配置為 true
fetch-registry: false # 是否從 Eureka 中獲取注冊(cè)信息,不配置時(shí),默認(rèn) true。 配置高可用時(shí),須注銷此行,或配置為 true
service-url: # 配置暴露給 EurekaClient 的請(qǐng)求地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://127.0.0.1:9000/eureka/ # 配置高可用時(shí),須配置為另一個(gè) EurekaServerApplication 的端口號(hào),如:8000
server:
enable-self-preservation: false # 關(guān)閉自我保護(hù)機(jī)制
eviction-interval-timer-in-ms: 4000 # 設(shè)置剔除服務(wù)間隔時(shí)間為 4000 毫秒(4秒)。此參數(shù)默認(rèn)為 true。
3)瀏覽器地址欄輸入:http://localhost:9000 輸出界面如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-859209.html
上一節(jié)鏈接如下:
# 從淺入深 學(xué)習(xí) SpringCloud 微服務(wù)架構(gòu)(三)注冊(cè)中心 Eureka(2)文章來源地址http://www.zghlxwxcb.cn/news/detail-859209.html
到了這里,關(guān)于# 從淺入深 學(xué)習(xí) SpringCloud 微服務(wù)架構(gòu)(三)注冊(cè)中心 Eureka(3)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!