SpringCloud集成consul


1:新建一個項目:

使用多模塊,

 

一直下一步即可,

porm.xml 添加依賴

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-dependencies</artifactId>
         <version>Finchley.SR2</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

springboot版本我使用的是2.0.5,不知為何使用2.1.6.無效

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 

 

 

2:啟動類添加了 @EnableDiscoveryClient 注解表示支持服務發現

@SpringBootApplication
@EnableDiscoveryClient
public class ConsulDemo2Application {

    public static void main(String[] args) {
        SpringApplication.run(ConsulDemo2Application.class, args);
    }

}

3:配置文件application.properties(Consul 的地址和端口號默認是 localhost:8500 ,如果不是這個地址可以自行配置。 spring.cloud.consul.discovery.serviceName 是指注冊到 Consul 的服務名稱,后期客戶端會根據這個名稱來進行服務調用。)

spring.application.name=spring-cloud-consul-producer
server.port=8501
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
#注冊到consul的服務名稱
spring.cloud.consul.discovery.serviceName=service-producer

4:新建一個 HelloController,提供 hello 的服務

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello,consul";
    }
}

為了模擬注冊均衡負載新建一份模塊命名為 producer2 ,項目內容和第一份一樣,修改對應的端口為 8507,修改 hello 方法的返回值為:”hello consul 2”,修改完成后依次啟動兩個項目。

 

Consul 消費端:consul-consumer
創建一個 consul-consumer模塊,pom 文件和上面示例保持一致。
配置文件(客戶端可以設置注冊到 Consul 中,也可以不注冊到 Consul 注冊中心中,根據我們的業務來選擇,只需要在使用服務時通過 Consul 對外提供的接口獲取服務信息即可。)

application.properties

spring.application.name=spring-cloud-consul-consumer
server.port=8503
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#設置不需要注冊到 consul 中
spring.cloud.consul.discovery.register=false

 

啟動類不需要@EnableDiscoveryClient

@SpringBootApplication
public class ConsulConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsulConsumerApplication.class, args);
    }

}

測試,創建一個 ServiceController ,試試如果去獲取 Consul 中的服務。

@RestController
public class ServiceController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 獲取所有的服務
     * */

    @RequestMapping("/services")
    public Object services(){
        return discoveryClient.getInstances("service-producer");

    }

    /**
     * 從所有服務中選擇一個服務(輪詢)
     */
    @RequestMapping("/discover")
    public Object discover() {
        return loadBalancerClient.choose("service-producer").getUri().toString();
    }


}

運行services方法:

訪問 http://localhost:8503/services

 記得一定要開啟consul,如何開啟可自行百度

 

源碼:https://gitee.com/Hiro-D/Java/tree/master/consul-demo

 

參考文章:https://blog.csdn.net/qq_26641781/article/details/82080659


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM