SpringCloud注冊(cè)中心之consul詳細(xì)講解使用方法
前言
今天我們開始學(xué)習(xí)spring cloud的又一個(gè)注冊(cè)中心consul,前面文章大概也講解了一下各個(gè)注冊(cè)中心的區(qū)別,今天我們直接開始配置consul到spring cloud。
從Springcloud官網(wǎng)Spring Cloud Consul篇章中我們可以看到官網(wǎng)對(duì)于consul的解釋
大致的意思就是Consul提供了自動(dòng)化配置的方式來(lái)使我們快速的綁定Consul到我們的spring環(huán)境及集成到我們的程序,使用一些簡(jiǎn)單的注解方式就可以為我們快速的部署大型分布式系統(tǒng),Consul為我們提供服務(wù)注冊(cè)發(fā)現(xiàn)、分布式配置及控制總線。
繼續(xù)往下查看
Quick start中我們基本了解,與zk一樣的我們需要使用@EnableDiscoveryClient注解來(lái)聲明服務(wù)發(fā)現(xiàn),配置consul的url和port分別為spring.cloud.consul.host和spring.cloud.consul.port。
A local Consul agent must be running.See the Consul agent documentation on how to run an agent. 官網(wǎng)提示我們需要運(yùn)行一個(gè)consul才能使用,consul的agent分為client及server,對(duì)于我們的spring cloud而已,不管是client還是server,都是當(dāng)作服務(wù)注冊(cè)中心看待即可。
1、創(chuàng)建服務(wù)提供者
我們創(chuàng)建consul的服務(wù)提供者provider-consul8001,然后引入我們的maven依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.11</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.6.11</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> </dependencies>
consul會(huì)默認(rèn)使用springboot的actuator來(lái)進(jìn)行健康檢查,所以這里我們引入它的依賴
這里我之前引用錯(cuò)了依賴spring-boot-actuator,注意正確的依賴應(yīng)該是spring-boot-starter-actuator
創(chuàng)建我們的配置文件application.yml,并將我們的consul進(jìn)行配置
server:
port: 8001
spring:
application:
name: provider
cloud:
consul:
host: 10.1.12.13
port: 8500
創(chuàng)建主啟動(dòng)類ProviderConsul8001Application.class及我們的測(cè)試接口文件ProviderController.class
@SpringBootApplication @EnableDiscoveryClient public class ProviderConsul8001Application { public static void main(String[] args) { SpringApplication.run(ProviderConsul8001Application.class,args); } }
@RestController public class ProviderController { @Value("${server.port}") private String port; @GetMapping("/consul/provider/getPort") public String getPort(){ return "你請(qǐng)求的生產(chǎn)者的端口號(hào)為:" + port; } }
2、創(chuàng)建服務(wù)消費(fèi)者
接下來(lái)我們創(chuàng)建消費(fèi)者的子工程consumer-consul8002,與生產(chǎn)者一樣我們引入maven依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.11</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.6.11</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> </dependencies>
創(chuàng)建配置文件application.yml,并進(jìn)行配置
server:
port: 8002
spring:
application:
name: consumer
cloud:
consul:
port: 8500
host: 10.1.12.13
創(chuàng)建主啟動(dòng)類,消費(fèi)接口類,負(fù)載Ribbon的配置文件
@SpringBootApplication @EnableDiscoveryClient public class ConsumerConsul8002Application { public static void main(String[] args) { SpringApplication.run(ConsumerConsul8002Application.class,args); } }
@RestController @RequestMapping("/consumer") public class ConsumerController { @Autowired private RestTemplate loadBalancedRestTemplate; @GetMapping("/getProviderPort") public String getProviderPort(){ return loadBalancedRestTemplate.getForObject("http://provider/consul/provider/getPort",String.class); } }
@Configuration public class RibbonConfig { @Bean @LoadBalanced public RestTemplate loadBalancedRestTemplate(){ return new RestTemplate(); } }
3、測(cè)試
啟動(dòng)我們的生產(chǎn)者和消費(fèi)者,登錄10.1.12.13:8500進(jìn)行查看是否成功注冊(cè)到我們的consul服務(wù)中。
我們發(fā)現(xiàn)服務(wù)已經(jīng)成功注入,但是出現(xiàn)了一個(gè)紅色的叉,提示At least one health check on one instance is failing。是因?yàn)槲覀儧](méi)有配置服務(wù)注冊(cè)到consul的地址和心跳等配置這里我們加上相應(yīng)的配置之后再啟動(dòng)服務(wù)。
spring:
application:
name: provider
cloud:
consul:
host: 10.1.12.13
port: 8500
discovery:
#hostname: localhost 此配置是服務(wù)注冊(cè)到consul的ip地址,因?yàn)榉?wù)部署有時(shí)候是沒(méi)有辦法確定的,所以盡量不要使用
#這里是將服務(wù)運(yùn)行的ip作為注冊(cè)ip注冊(cè)到consul,consul在進(jìn)行健康檢查的時(shí)候會(huì)使用,替代掉consul.discovery.hostname
prefer-ip-address: true
#service-name: ${spring.application.name} 這個(gè)是服務(wù)注冊(cè)到consul的實(shí)例名稱,部署集群的時(shí)候會(huì)出現(xiàn)相同實(shí)例名稱會(huì)被頂替
#替換service-name來(lái)進(jìn)行實(shí)例名稱注入,使用名稱加ip來(lái)識(shí)別唯一性,進(jìn)行集群部署防止同名頂替
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
# 心跳開啟,如果不開啟心跳,注冊(cè)到consul會(huì)報(bào)錯(cuò)
heartbeat:
enabled: true
consul需要進(jìn)行健康檢查,所以需要服務(wù)將自己的ip進(jìn)行注冊(cè),hostname配置的是死的地址不夠靈活,使用prefer-ip-address來(lái)進(jìn)行動(dòng)態(tài)配置。
多個(gè)實(shí)例使用一個(gè)名稱的時(shí)候,會(huì)出現(xiàn)同名頂替,所以使用instance-id來(lái)做實(shí)例id注冊(cè)唯一性可避免,心跳需要手動(dòng)開啟,不開啟心跳consul無(wú)法進(jìn)行健康檢查會(huì)報(bào)錯(cuò)。
重新配置后啟動(dòng)項(xiàng)目,已經(jīng)正常注冊(cè)
這里注冊(cè)兩個(gè)provider來(lái)驗(yàn)證咱們的集群,上面講到會(huì)被頂替的問(wèn)題,這里同一個(gè)服務(wù)器啟動(dòng)多個(gè)的時(shí)候,最好將端口號(hào)也加入來(lái)作為唯一健,這樣就不會(huì)頂替,上面錯(cuò)誤那個(gè)就是因?yàn)轫斕媪酥貑⒘粝聛?lái)的。
好了,現(xiàn)在我們項(xiàng)目已經(jīng)成功注冊(cè)到了consul,我們調(diào)用消費(fèi)者接口進(jìn)行驗(yàn)證http://localhost:8002/consumer/getProviderPort
到此我們使用consul作為注冊(cè)中心就完成了。
上面注冊(cè)的失效的服務(wù),如果不進(jìn)行移除,可能會(huì)出現(xiàn)請(qǐng)求會(huì)轉(zhuǎn)發(fā)到異常的服務(wù)上面,因?yàn)閏onsul不會(huì)自動(dòng)移除失效的注冊(cè)列表,所以這里可以參考官網(wǎng)文檔(Deregister Service)進(jìn)行手動(dòng)移除。
到此這篇關(guān)于SpringCloud注冊(cè)中心之consul詳細(xì)講解使用方法的文章就介紹到這了,更多相關(guān)SpringCloud consul內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud中的Eureka注冊(cè)中心詳細(xì)解讀
- springcloud本地服務(wù)不注冊(cè)到注冊(cè)中心的解決方案
- SpringCloud zookeeper作為注冊(cè)中心使用介紹
- SpringCloud?Eureka服務(wù)注冊(cè)中心應(yīng)用入門詳解
- SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊(cè)中心的方法
- Java之SpringCloud nocos注冊(cè)中心講解
- 淺析SpringCloud Alibaba-Nacos 作為注冊(cè)中心示例代碼
- Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法
- springcloud實(shí)現(xiàn)注冊(cè)中心Eureka
- SpringCloud兩種注冊(cè)中心的實(shí)現(xiàn)
相關(guān)文章
解決springboot?部署到?weblogic?中?jar?包沖突的問(wèn)題
這篇文章主要介紹了springboot?部署到?weblogic?中?jar?包沖突,weblogic?也有是解決方案的,可以通過(guò)新增并配置?weblogic.xml?文件來(lái)定義哪些類需要優(yōu)先從項(xiàng)目工程包的?jar?包中加載,本文給大家分享解決方法,需要的朋友可以參考下2022-08-08Spring配置和使用Properties文件的詳細(xì)步驟
在Spring框架中,.properties 文件通常用于存儲(chǔ)配置信息,如數(shù)據(jù)庫(kù)連接、服務(wù)地址、應(yīng)用參數(shù)等,本文給大家介紹了Spring配置和使用Properties文件的詳細(xì)步驟,需要的朋友可以參考下2024-05-05mybatis根據(jù)表逆向自動(dòng)化生成代碼的實(shí)現(xiàn)
若采用mybatis框架,數(shù)據(jù)庫(kù)新建表,手動(dòng)編寫的話,需要編寫大量的實(shí)體類、mapper文件、mapper.xml文件,都是一些重復(fù)且有規(guī)律的工作。我們可以引用插件,然后做配置,自動(dòng)生成這些文件,本文就來(lái)詳細(xì)的介紹一下2021-08-08一文帶你學(xué)會(huì)Java網(wǎng)絡(luò)編程
網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過(guò)網(wǎng)絡(luò)連接起來(lái)。這篇文章將帶大家深入了解一下Java的網(wǎng)絡(luò)編程,需要的可以了解一下2022-08-08spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求
這篇文章主要介紹了spring?boot通過(guò)自定義注解和AOP攔截指定的請(qǐng)求,本文主要通過(guò)切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說(shuō)明),需要的朋友可以參考下2024-06-06@RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問(wèn)題解決分析
這篇文章主要為大家介紹了@RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問(wèn)題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Java動(dòng)態(tài)調(diào)用類中方法代碼
這篇文章主要介紹了Java動(dòng)態(tài)調(diào)用類中方法代碼,需要的朋友可以參考下2014-02-02Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決
這篇文章主要介紹了Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08