IDEA搭建spring cloud一步一步詳解


IDEA搭建spring cloud一步一步詳解

1 概述

Spring Cloud基於Spring Boot,提供了多個組件來幫助企業進行微服務系統建設;它提供的主要功能有:服務注冊中心/服務注冊/服務調用/負載均衡/斷路器等;一般情況下它都是使用已有的開源軟件,在其基礎上按Spring Boot的理念來進行封裝,簡化各種個組件的調用以及各個組件之間的交互。

2 常用組件

Spring Cloud主要包含以下常用組件:

2.1 Eureka

分成兩類,一是注冊中心及EurekaServer,用於提供服務注冊/服務申請等功能;
一是被注冊者及服務提供者EurekaClient,用於向EurekaServer注冊服務並可從EurekaServer獲取需要調用的服務地址信息;
需要向外提供服務的應用,需要使用EurekaClient來向Server注冊服務。

2.2 Ribbon

負責進行客戶端負載均衡的組件;一般與RestTemplate結合,在訪問EurekaClient提供的服務時進行負載均衡處理。
也就是說,Ribbon用於服務調用者向被調用者進行服務調用,並且如果服務者有多個節點時,會進行客戶端的負載均衡處理;

2.3 Feign

與Ribbon功能類型,用於調用方與被調用方的服務調用,同時進行客戶端負載均衡的處理;不過它能提供類似本地調用的方式調用遠程的EurekaClient提供的服務;它實際上是在Ribbon基礎上進行了進一步的封裝來提高調用服務的簡便性。

3 使用示例

3.1 示例場景

假設現在有SERVICEAPP1向外提供服務,該服務同時部署兩個節點;Client通過Feign或者是Ribbon調用其提供的服務,其部署關系及數據流向圖如下所

 

 

 

第一步:啟動注冊中心;服務提供者及調用者向服務中心注冊;
第二步:服務調用者向服務中心申請服務,根據服務中心返回的地址信息調用服務提供者提供的服務;
第三步:注冊中心通過心跳檢測方式檢測服務提供者的狀態,當某個提供者連接不上時,發送消息通知所有注冊者;

一.項目目錄結構

先上一張構建好的spring-cloud工程結構圖.(聯網操作!!!聯網操作!!聯網操作!!!重要的事情說三遍)

 

 

二.創建root項目

spring-cloud_root是root項目,里面包括Eureka服務(eureka-server)和Eureka客戶端(eureka-client)

1.File → New project,這里選擇 maven項目,然后下一步填寫Groupid和Artifactld,然后下一步,

 

 2.配置root項目的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.sky</groupId>
<artifactId>spring-cloud-01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>

<modules>
<module>eureka-server</module>
<module>service-client-01</module>
</modules>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>

<dependencies>
<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>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

這里注意:這是因為我們還未建eureka-server子模塊

 

 

三.創建eureka-server子model

1.在spring-cloud_root項目右鍵 new → module,選擇Spring initializr然后next:

 

 

 

 

 

 

 

 

 聯網導入相關的依賴

 

 當我們建第一個模塊eureka-server的時候,root項目的pom文件就不會報錯了!(簡而言之我們還缺少一個service-clien)這樣的模塊!

eureka-server  POM文件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dupo</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>




 

 

 

 在啟動類上加@EnableEurekaServer//注解

 配置application.yml文件,此文件一定要以application.yml命名,且一定要放到resources目錄下(pringboot約定大於約束原則)

application.yml內容如下!

server:
port: 9001

eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
application:
name: eureka-server

 

 

 

 

 這里我的9001已經被占用了!我用的是9002(瀏覽器訪問:http://localhost:9002/

此時, Instances currently registered with Eureka 下顯示是空的,目前還沒有服務注冊到這里,下面開始寫客戶端項目.

 

 

 

四.創建eureka-client項目.

一樣的操作!!

 

 

 

這樣我們的root項目下的pom文件就不會報錯了!

 

 

pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dupo</groupId>
<artifactId>eureka-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-client</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

編寫一個controller,代碼如下:

 

 

 如果不能引用@RestController@RequestMapping注解

導入依賴

  1.  
    <dependency>
  2.  
     
  3.  
    <groupId>org.springframework.boot </groupId>
  4.  
     
  5.  
    <artifactId>spring-boot-starter-web </artifactId>
  6.  
     
  7.  
    </dependency>

更新pom文件

啟動eureka-server后啟動qureka-client  重新訪問http://localhost:9002/ 這時候nstances currently registered with Eureka下回注冊一個實例

 

訪問我們編寫的controller來驗證eureka服務是否搭建成功,瀏覽器輸入地址:http://localhost:9002/client/hi?name=sky,瀏覽器返回結果如下,這spring cloud到此搭建完成.!!

如果能看到 hi sky , i am from port 9002 ,恭喜你搭建成功,

 

 

 

 


免責聲明!

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



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