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