摘要:何時首選地址在某些情況下,最好公布服務的地址而不是主機名,將設置為,當應用程序向注冊時,它使用其地址而不是其主機名。
服務發現:Eureka Server
本節介紹如何設置Eureka服務器。
如何包含Eureka服務器要在項目中包含Eureka Server,請使用組ID為org.springframework.cloud和工件ID為spring-cloud-starter-netflix-eureka-server的啟動器。
如果你的項目已使用Thymeleaf作為其模板引擎,則可能無法正確加載Eureka服務器的Freemarker模板,在這種情況下,有必要手動配置模板加載器:
application.yml
spring: freemarker: template-loader-path: classpath:/templates/ prefer-file-system-access: false如何運行Eureka服務器
以下示例顯示了最小的Eureka服務器:
@SpringBootApplication @EnableEurekaServer public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
服務器有一個UI主頁和在/eureka/*下用于正常Eureka功能的HTTP API端點。
以下鏈接有一些Eureka背景閱讀:flux capacitor和谷歌小組討論。
由于Gradle的依賴關系解析規則和缺少父bom特性,依賴spring-cloud-starter-netflix-eureka-server可能導致應用程序啟動失敗,要解決此問題,請添加Spring Boot Gradle插件并導入Spring cloud starter parent bom,如下所示:
build.gradle
buildscript { dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:{spring-boot-docs-version}") } } apply plugin: "spring-boot" dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:{spring-cloud-version}" } }高可用性、Zones和Regions
Eureka服務器沒有后端存儲,但注冊表中的服務實例都必須發送心跳以使其注冊保持最新(因此可以在內存中完成),客戶端還有一個Eureka注冊的內存緩存(因此,它們不必對服務的每個請求都去注冊表)。
默認情況下,每個Eureka服務器也是Eureka客戶端,并且需要(至少一個)服務URL來定位對等體,如果你不提供該服務,該服務將運行并工作,但它會在你的日志中填充很多關于無法向對等方注冊的噪音。
獨立模式兩個緩存(客戶端和服務器)的組合和心跳使獨立的Eureka服務器能夠很好地應對故障,只要有某種監視器或彈性運行時(例如Cloud Foundry)保持活著。在獨立模式下,你可能更愿意關閉客戶端行為,以便它不會繼續嘗試并且無法訪問其對等方,以下示例顯示如何關閉客戶端行為:
application.yml(獨立Eureka服務器)。
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
請注意,serviceUrl指向與本地實例相同的主機。
對等感知通過運行多個實例并要求它們相互注冊,可以使Eureka更具彈性和可用性,實際上,這是默認行為,因此你需要做的就是將有效的serviceUrl添加到對等體,如以下示例所示:
application.yml(兩個Peer Aware Eureka服務器)。
--- spring: profiles: peer1 eureka: instance: hostname: peer1 client: serviceUrl: defaultZone: http://peer2/eureka/ --- spring: profiles: peer2 eureka: instance: hostname: peer2 client: serviceUrl: defaultZone: http://peer1/eureka/
在前面的示例中,我們有一個YAML文件,可以通過在不同的Spring配置文件中運行它來在兩個主機(peer1和peer2)上運行相同的服務器,你可以使用此配置通過操作/etc/hosts來解析主機名來測試單個主機上的對等感知(在生產中執行此操作沒有太大價值)。實際上,如果你在知道自己的主機名的計算機上運行,??則不需要eureka.instance.hostname(默認情況下,使用java.net.InetAddress查找它)。
你可以將多個對等體添加到系統中,并且只要它們通過至少一個邊緣彼此連接,它們就會在它們之間同步注冊,如果對等體在物理上是分開的(在數據中心內或在多個數據中心之間),那么系統原則上可以在“裂腦”類型故障中存活,你可以向系統添加多個對等體,只要它們彼此直接連接,它們就會在它們之間同步注冊。
application.yml(三個Peer Aware Eureka服務器)。
eureka: client: serviceUrl: defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/ --- spring: profiles: peer1 eureka: instance: hostname: peer1 --- spring: profiles: peer2 eureka: instance: hostname: peer2 --- spring: profiles: peer3 eureka: instance: hostname: peer3何時首選IP地址
在某些情況下,Eureka最好公布服務的IP地址而不是主機名,將eureka.instance.preferIpAddress設置為true,當應用程序向eureka注冊時,它使用其IP地址而不是其主機名。
如果Java無法確定主機名,則將IP地址發送給Eureka,設置主機名的明確方法是只有設置eureka.instance.hostname屬性,你可以使用環境變量在運行時設置主機名 — 例如,eureka.instance.hostname=${HOST_NAME}。保護Eureka服務器
只需將spring-boot-starter-security添加到服務器的類路徑中,即可通過Spring Security保護你的Eureka服務器,默認情況下,當Spring Security位于類路徑上時,它將要求應用程序的每次請求都要發送有效的CSRF令牌,Eureka客戶端通常不會擁有有效的跨站點請求偽造(CSRF)令牌,你需要為/eureka/**端點禁用此要求,例如:
@EnableWebSecurity class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } }
有關CSRF的更多信息,請參閱Spring Security文檔。
可以在Spring Cloud Samples存儲庫中找到Eureka Server demo。
JDK 11支持在JDK 11中刪除了Eureka服務器所依賴的JAXB模塊,如果你打算在運行Eureka服務器時使用JDK 11,則必須在POM或Gradle文件中包含這些依賴項。
上一篇:服務發現:Eureka客戶端 下一篇:斷路器:Hystrix客戶端javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74128.html
摘要:這些發布在服務注冊表中,客戶端使用它們以直接的方式聯系服務,可以將額外元數據添加到中的實例注冊中,并且可以在遠程客戶端中訪問此元數據。 服務發現:Eureka客戶端 服務發現是基于微服務架構的關鍵原理之一,嘗試手動配置每個客戶端或某種形式的約定可能很難做到并且可能很脆弱,Eureka是Netflix Service Discovery服務器和客戶端,服務器可以被配置和部署為高可用性,每...
摘要:應用程序可以立即利用或應用程序開發人員提供的其他外部屬性源,它還提取了一些與變化事件相關的額外有用特性。標簽也可以以逗號分隔列表的形式提供,在這種情況下,列表中的項目將逐個嘗試,直到成功為止,在處理特性分支時,此行為非常有用。 Spring Cloud Config Client Spring Boot應用程序可以立即利用Spring Config Server(或應用程序開發人員提供...
摘要:創建過程同類似創建完如下通過注解表明自己是一個僅僅是不夠的,還需要在配置文件中注明自己的服務注冊中心的地址,配置文件如下需要指明這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個。 轉載請標明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 一、spring cloud簡介 spring cloud 為開發人員提供了快速構建分布式系...
摘要:下一篇介紹基于的服務注冊與調用。服務提供者工程配置這里服務提供者是使用之前進階教程第三篇整合連接池以及監控改造而來,這里一樣的部分就不再重復說明,下面將說明新增的部分。 Spring Cloud簡介 Spring Cloud是一個基于Spring Boot實現的云應用開發工具,它為基于JVM的云應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分...
閱讀 2418·2023-04-26 00:46
閱讀 581·2023-04-25 21:36
閱讀 729·2021-11-24 10:19
閱讀 2266·2021-11-23 09:51
閱讀 1015·2021-10-21 09:39
閱讀 830·2021-09-22 10:02
閱讀 1664·2021-09-03 10:29
閱讀 2677·2019-08-30 15:53