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

SpringCloud注冊中心之consul詳細講解使用方法

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

前言

今天我們開始學習spring cloud的又一個注冊中心consul,前面文章大概也講解了一下各個注冊中心的區(qū)別,今天我們直接開始配置consul到spring cloud。

從Springcloud官網(wǎng)Spring Cloud Consul篇章中我們可以看到官網(wǎng)對于consul的解釋

大致的意思就是Consul提供了自動化配置的方式來使我們快速的綁定Consul到我們的spring環(huán)境及集成到我們的程序,使用一些簡單的注解方式就可以為我們快速的部署大型分布式系統(tǒng),Consul為我們提供服務注冊發(fā)現(xiàn)、分布式配置及控制總線。

繼續(xù)往下查看

Quick start中我們基本了解,與zk一樣的我們需要使用@EnableDiscoveryClient注解來聲明服務發(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)提示我們需要運行一個consul才能使用,consul的agent分為client及server,對于我們的spring cloud而已,不管是client還是server,都是當作服務注冊中心看待即可。

1、創(chuàng)建服務提供者

我們創(chuàng)建consul的服務提供者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會默認使用springboot的actuator來進行健康檢查,所以這里我們引入它的依賴

這里我之前引用錯了依賴spring-boot-actuator,注意正確的依賴應該是spring-boot-starter-actuator

創(chuàng)建我們的配置文件application.yml,并將我們的consul進行配置

server:
  port: 8001
spring:
  application:
    name: provider
  cloud:
    consul:
      host: 10.1.12.13
      port: 8500

創(chuàng)建主啟動類ProviderConsul8001Application.class及我們的測試接口文件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 "你請求的生產(chǎn)者的端口號為:" + port;
    }
}

2、創(chuàng)建服務消費者

接下來我們創(chuàng)建消費者的子工程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,并進行配置

server:
  port: 8002
spring:
  application:
    name: consumer
  cloud:
    consul:
      port: 8500
      host: 10.1.12.13

創(chuàng)建主啟動類,消費接口類,負載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、測試

啟動我們的生產(chǎn)者和消費者,登錄10.1.12.13:8500進行查看是否成功注冊到我們的consul服務中。

我們發(fā)現(xiàn)服務已經(jīng)成功注入,但是出現(xiàn)了一個紅色的叉,提示At least one health check on one instance is failing。是因為我們沒有配置服務注冊到consul的地址和心跳等配置這里我們加上相應的配置之后再啟動服務。

spring:
  application:
    name: provider
  cloud:
    consul:
      host: 10.1.12.13
      port: 8500
      discovery:
        #hostname: localhost  此配置是服務注冊到consul的ip地址,因為服務部署有時候是沒有辦法確定的,所以盡量不要使用
        #這里是將服務運行的ip作為注冊ip注冊到consul,consul在進行健康檢查的時候會使用,替代掉consul.discovery.hostname
        prefer-ip-address: true
        #service-name: ${spring.application.name} 這個是服務注冊到consul的實例名稱,部署集群的時候會出現(xiàn)相同實例名稱會被頂替
        #替換service-name來進行實例名稱注入,使用名稱加ip來識別唯一性,進行集群部署防止同名頂替
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
        # 心跳開啟,如果不開啟心跳,注冊到consul會報錯
        heartbeat:
          enabled: true

consul需要進行健康檢查,所以需要服務將自己的ip進行注冊,hostname配置的是死的地址不夠靈活,使用prefer-ip-address來進行動態(tài)配置。

多個實例使用一個名稱的時候,會出現(xiàn)同名頂替,所以使用instance-id來做實例id注冊唯一性可避免,心跳需要手動開啟,不開啟心跳consul無法進行健康檢查會報錯。

重新配置后啟動項目,已經(jīng)正常注冊

這里注冊兩個provider來驗證咱們的集群,上面講到會被頂替的問題,這里同一個服務器啟動多個的時候,最好將端口號也加入來作為唯一健,這樣就不會頂替,上面錯誤那個就是因為頂替了重啟留下來的。

好了,現(xiàn)在我們項目已經(jīng)成功注冊到了consul,我們調(diào)用消費者接口進行驗證http://localhost:8002/consumer/getProviderPort

到此我們使用consul作為注冊中心就完成了。

上面注冊的失效的服務,如果不進行移除,可能會出現(xiàn)請求會轉(zhuǎn)發(fā)到異常的服務上面,因為consul不會自動移除失效的注冊列表,所以這里可以參考官網(wǎng)文檔(Deregister Service)進行手動移除。

到此這篇關(guān)于SpringCloud注冊中心之consul詳細講解使用方法的文章就介紹到這了,更多相關(guān)SpringCloud consul內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決springboot?部署到?weblogic?中?jar?包沖突的問題

    解決springboot?部署到?weblogic?中?jar?包沖突的問題

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

    Spring配置和使用Properties文件的詳細步驟

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

    mybatis根據(jù)表逆向自動化生成代碼的實現(xiàn)

    若采用mybatis框架,數(shù)據(jù)庫新建表,手動編寫的話,需要編寫大量的實體類、mapper文件、mapper.xml文件,都是一些重復且有規(guī)律的工作。我們可以引用插件,然后做配置,自動生成這些文件,本文就來詳細的介紹一下
    2021-08-08
  • 一文帶你學會Java網(wǎng)絡編程

    一文帶你學會Java網(wǎng)絡編程

    網(wǎng)絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都通過網(wǎng)絡連接起來。這篇文章將帶大家深入了解一下Java的網(wǎng)絡編程,需要的可以了解一下
    2022-08-08
  • 詳解Java中二叉樹的基礎概念(遞歸&迭代)

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

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

    spring?boot如何通過自定義注解和AOP攔截指定的請求

    這篇文章主要介紹了spring?boot通過自定義注解和AOP攔截指定的請求,本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細的說明),需要的朋友可以參考下
    2024-06-06
  • @RefreshScope在Quartz 觸發(fā)器類導致異常問題解決分析

    @RefreshScope在Quartz 觸發(fā)器類導致異常問題解決分析

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

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

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

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

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

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

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

最新評論