一、概述
上篇已經構建出了Spring cloud 的基本骨架,在本文中將介紹如何快速構建 Eureka Server端口 服務注冊于發現,后續的文章都會使用 microserver-parent項目作為parent信息,不了解的朋友建議從上一章開始看起? ps:作者能力有限,表達能力不足,這里將不會講述概念性的講解,想了解概念的朋友可自行百度查閱或官網查閱自行理解,同時盡可能的照顧到新人朋友,教大家如何從官網中學習一門技術。
本文所有Demo都將上傳至GitHub中方便各位朋友查看學習,如您對本人的編碼風格或其他建議可以聯系博主。
二、目錄結構
Spring Authorization Server、?
三、構建Eureka Server
1)使用IDEA 快速構建
2)Spring cloud 官網看下是如何將 Eureka 添加到項目中去。
cloudfoam技術詳解?
從官方這段話的意思來看,需要我們為Spring boot 項目 引入jar 包
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
四、配置 Eureka Server 與啟動 Server 服務
1)將項目中生成的 application.properties 修改為 yml? 格式
2)從官網的說明,我們看到有個?@EnableEurekaServer?注解,也就是說我們需要對我們項目的啟動類添加該注解作為Server端
eureka獲取服務列表、
3)如何配置 Eureka Server信息,從官網中我們可以看到,Eureka 服務 是分為高可用和單機的兩種模式,從官方給的配置信息來看,有兩處不同的地方
左圖單機版本,右圖高可用版
? ? ? ? ? ?
springcloud 教程, 從上圖中我們看到 eureka.client 發現?registerWithEureka 與?fetchRegistry 從字面上不難理解,registerWithEureka 是否將自身注冊到Eureka Server 中,fetchRegistry 是否從Server 獲取注冊表,本文將采用單機版的作為講解,同時可以看看官方配置?Eureka的其他配置,由于配置信息過多也不做介紹了,我們在這里直接直接使用單機版的配置。啟動項目看看效果
?
五、添加用戶認證
1)從官網看到如果需要添加安全認證的話就需要對 defaultZone 這里進行改造 為 user:password@ip:port 這種格式
eureka客戶端配置,?
2)引入認證jar包,同時需要在我們的啟動類上添加新的注解?@EnableWebSecurity
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId></dependency>
3)改造yml 在這里說明下,配置信息這塊碰到坑了,折騰了一會才搞清楚什么原因,只能說嘗鮮需謹慎。
server:port: 8761spring:application:name: @project.artifactId@security:user:name: userpassword: password123 logging:level:root: infoeureka:instance:prefer-ip-address: true # 將自身ip注冊到Eureka中instance-id: ${spring.application.name}(${spring.cloud.client.ip-address}:${server.port}) # 自定義顯示方式 項目名稱(ip:port)client:register-with-eureka: false # 是否注冊到服務中 ,由于是單機版本,設置為 false , 如果需要配置高可用的 Eureka Server 需要設置為 truefetch-registry: false # 是否從 Server 中獲取服務列表 ,設置為 false ,如果需要配置高可用的 Eureka Server 需要設置為 trueservice-url:defaultZone: http://user:password123@localhost:8761/eureka/ # Eureka Server 地址 高可用的 需要相互注冊 多個地址用,號分割 server:enable-self-preservation: false # 關閉Eureka 自我保護功能,生產環境不建議關閉eviction-interval-timer-in-ms: 4000 # 設置清理間隔時間 單位 (毫秒) 默認60*1000
?${spring.cloud.client.ip-address}??這段配置做個說明吧,在老版本中 是這樣寫的?${spring.cloud.client.ipAddress} 不知道在什么版本中更新了,最后翻看源碼看到這里的配置發生了細微的變動。
?
?
4)解決 Eureka client 端口向服務端注冊時遇到的問題,問題說明:Eureka client 向Server注冊時,無用戶認證時可以正常獲取Server端進行注冊,添加用戶認證后失敗,困擾作者很久,最終無奈只能上 GitHub 上尋求答案,看到貢獻者在問題下方有做出這樣的回答,大概意思就是 Security 默認是開啟了 CSRF保護,同時也告訴我們解決方案就是關閉 CSRF保護,并且給出了關鍵性代碼,在這里感謝下可愛的貢獻者們,作者的話癆病又犯了 - 。-? ?再次強調一下 (嘗鮮需謹慎),廢話少說點吧,趕緊上關鍵性代碼
public class EurekaSecurityConfiguration {@Configuration@Order(SecurityProperties.BASIC_AUTH_ORDER)static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {super.configure(http);http.csrf().disable();}} }
5)啟動client端口看看能不能注冊,從下圖可以看到已經成功。
?