欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud注冊(cè)中心之consul詳細(xì)講解使用方法

 更新時(shí)間:2022年11月11日 10:23:16   作者:麻儂  
Consul是一款由HashiCorp公司開源的,用于服務(wù)治理的軟件,Spring Cloud Consul對(duì)其進(jìn)行了封裝,這篇文章主要介紹了springcloud組件consul服務(wù)治理,需要的朋友可以參考下

前言

今天我們開始學(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決springboot?部署到?weblogic?中?jar?包沖突的問(wèn)題

    解決springboot?部署到?weblogic?中?jar?包沖突的問(wèn)題

    這篇文章主要介紹了springboot?部署到?weblogic?中?jar?包沖突,weblogic?也有是解決方案的,可以通過(guò)新增并配置?weblogic.xml?文件來(lái)定義哪些類需要優(yōu)先從項(xiàng)目工程包的?jar?包中加載,本文給大家分享解決方法,需要的朋友可以參考下
    2022-08-08
  • Spring配置和使用Properties文件的詳細(xì)步驟

    Spring配置和使用Properties文件的詳細(xì)步驟

    在Spring框架中,.properties 文件通常用于存儲(chǔ)配置信息,如數(shù)據(jù)庫(kù)連接、服務(wù)地址、應(yīng)用參數(shù)等,本文給大家介紹了Spring配置和使用Properties文件的詳細(xì)步驟,需要的朋友可以參考下
    2024-05-05
  • mybatis根據(jù)表逆向自動(dòng)化生成代碼的實(shí)現(xiàn)

    mybatis根據(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ò)編程

    一文帶你學(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-08
  • 詳解Java中二叉樹的基礎(chǔ)概念(遞歸&迭代)

    詳解Java中二叉樹的基礎(chǔ)概念(遞歸&迭代)

    二叉樹(Binary?tree)是樹形結(jié)構(gòu)的一個(gè)重要類型。本文將通過(guò)圖片和示例代碼詳細(xì)為大家講解一下Java中的二叉樹的基礎(chǔ)概念,需要的可以參考一下
    2022-03-03
  • spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求

    spring?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)題解決分析

    這篇文章主要為大家介紹了@RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問(wèn)題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java動(dòng)態(tài)調(diào)用類中方法代碼

    Java動(dòng)態(tài)調(diào)用類中方法代碼

    這篇文章主要介紹了Java動(dòng)態(tài)調(diào)用類中方法代碼,需要的朋友可以參考下
    2014-02-02
  • Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決

    Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決

    這篇文章主要介紹了Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JDBC如何獲取數(shù)據(jù)庫(kù)連接

    JDBC如何獲取數(shù)據(jù)庫(kù)連接

    這篇文章主要為大家詳細(xì)為大家詳細(xì)介紹了JDBC如何獲取數(shù)據(jù)庫(kù)連接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論