1. 程式人生 > >spring cloud 學習(一) 服務註冊與發現

spring cloud 學習(一) 服務註冊與發現

最近開始學習spring cloud,
跟著這個學:http://blog.didispace.com/spring-cloud-starter-dalston-1/

以下是我抄的定義:
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。

Spring Cloud包含了多個子專案(針對分散式系統中涉及的多個不同開源產品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等專案。

一 .服務中心
有兩種方法,一種是使用Spring Cloud Eureka,另一種是使用Spring Cloud Consul。
前者保證高可用後者保證強一致性

https://www.zhihu.com/question/55749122/answer/313757969

然後來撘框架吧
建立maven專案 eureka-server
pom.xml

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId
>
<version>1.5.6.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
</dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

啟動類
通過@EnableEurekaServer註解啟動一個服務註冊中心提供給其他應用進行對話

@EnableEurekaServer
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class)
                    .web(true).run(args);
    }
}

在預設設定下,該服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為,只需要在application.properties配置檔案中增加如下資訊:

spring:
  application:
    name: eureka-server
server:
  port: 1001

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false

這裡寫圖片描述
註冊中心完成,下面來看服務提供者

pom

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

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

<dependencyManagement>
    <dependencies>
        <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Dalston.SR1</version>
           <type>pom</type>
           <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

實現/dc請求處理介面,通過DiscoveryClient物件,在日誌中打印出服務例項的相關內容。

@RestController
public class DcController {

    @Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("/dc")
    public String dc() {
        String services = "Services: " + discoveryClient.getServices();
        System.out.println(services);
        return services;
    }

}

啟動項
@EnableDiscoveryClient註解,該註解能啟用Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務資訊的輸出。

@EnableDiscoveryClient
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(
                Application.class)
            .web(true).run(args);
    }
}

配置檔案

spring:
  application:
    name: eureka-client
server:
  port: 2001

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1001/eureka/

這裡寫圖片描述
上面顯示的紅字這裡還不知道什麼原因,會有什麼影響
這裡先標記下解決方案。
1.https://www.cnblogs.com/breath-taking/articles/7940364.html
2.https://blog.csdn.net/lc0817/article/details/54375802

也可以通過直接訪問eureka-client服務提供的/dc介面來獲取當前的服務清單,只需要訪問:http://localhost:2001/dc,我們可以得到如下輸出返回:
這裡寫圖片描述

下面來實現Spring Cloud Consul
先去官網安裝服務中心

https://www.consul.io/downloads.html

啟動

consul agent -dev

在瀏覽器開啟http://localhost:8500/ui/#/dc1/services
這裡寫圖片描述
修改eureka的pom

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>

修改配置檔案

spring:
  application:
    name: consul-client
  cloud:
    consul:
      host: localhost
      port: 8500

server:
  port: 2002

啟動就可以在服務中心發現自己的服務了
這裡寫圖片描述