Spring-Cloud項目基本搭建
源碼下載:https://download.csdn.net/download/shfei10100/10625302
隨着近幾年微服務架構理念的流行,越來越多微服務架構也進入人們的視野,目前大部分公司用的比較多的是阿里的rcp框架Dubbo,Spring-Cloud等。下面本人簡單的給分享一下關於Spring-Cloud 的基本技術心得:
Spring-Clou可以說成對現有Spring-boot 封裝和抽象 一下是關於Spring-Could Api文檔地址
官方文檔:http://projects.spring.io/spring-cloud/#quick-start
那麼Spring Boot和和Spring Cloud 功能區別是什麼呢?
-
1.Spring Boot 它內嵌Web服務器(tomcat/jetty)的可執行程序的框架。你開發的web應用不需要作爲war包部署到web服務器中[例如:把war包扔到tomcat app下],Spring Boot 直接作爲一個可啓動程序,直接把Web啓動起來加載起來。
-
2.Spring Cloud是一套微服務開發和治理框架,來自Netflex的OSS,包含了微服務運行的功能,可以通過Spring-boot 項目集成很多功能比如 RabbitMQ,ES,Ribbon,負載均衡,限流等。
Spring Cloud 基本項目搭建步驟
Spring Cloud 服務註冊發現實現原理 如圖
A、B、C、三個服務將項目註冊到註冊中心去,註冊中心會不定時的檢測每個項目的是否正常運行或者被註冊。
第一步:我們先創建註冊中心
首先先創建一個Spring-Boot 應用【本項目採用esclpilse+maven開發】
先創建一個Maven-Project root父類便於版本控制【當然也可以直接創建】
編寫POM文件添加Spring-Cloud基本應用包
<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.qsf.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 建議用1.4.0以後的版本之前的不能可能導致部分功能不能使用 包衝突 會出現註冊問題 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<modules>
<module>spring-register</module><!--註冊中心項目-->
</modules>
<!-- spring-cloud所有項目依賴包 -->
<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>
<build>
<finalName>spring-root</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
創建註冊中心項目springcloud-eureka 並且通過maven指定父類目錄
創建一個maven-module
編寫spring-demo-register 文件添加依賴包文件POM.xml
<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>
<parent>
<groupId>com.qsf.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-eureka</artifactId>
<!-- 添加註冊中心依賴的包文件 -->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
添加註冊中心啓動類以及配置Spring-Boot 配置.application.yml文件
package com;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication //spring-boot 啓動註解
@EnableEurekaServer // spring-cloud 服務註解
public class RegisterMain{
public static void main(String [] args) {
new SpringApplicationBuilder(RegisterMain.class).web(true).run(args);
}
}
application.yml
server:
port: 8888
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
訪問 localhost:8888
如果出現這個頁面的話 就表示註冊中心已經完成了
第二步 創建服務註冊到註冊中心
創建一個maven module 項目
配置spring-demo-A 項目 pom文件
添加註冊啓動類以及配置Spring-Boot 配置.application.yml文件
AppMain.java
package com;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //Eureka Client
public class AppMain {
public static void main(String[] args) {
new SpringApplicationBuilder(AppMain.class).web(true).run(args);
}
}
application.yml
server:
port: 8001
spring:
application:
name: spring-cloud-common
#註冊中心指向start
eureka:
instance:
instance-id: spring-cloud-common
appname: ${spring.application.name}
client:
service-url:
defaultZone: http://127.0.0.1:8888/eureka/
#註冊中心指向end
PS:需要注意的defaultZone 我是在本地測試因此需要啓動先啓動之前的註冊中心保證註冊中心是可用的。
啓動run-as->AppMain.java
再次訪問:註冊中心的訪問地址 localhost:8888
大家會發現 有一個服務被註冊到改改註冊中心上。但是這會有一個問就是所有的其他人的服務也可以註冊到我們這裏 這樣怎麼如何解決這問題呢?就在註冊中心配置一個密碼就可以實現此功能。
註冊中心密碼配置
首先需要引用 Spring-Could的官方包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
application.yml 文件配置
server:
port: 8888
security:
basic:
enable: true
user:
name: admin
password: 1qaz2wsx
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${security.user.name}:${security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
啓動就好了
其他服務如果需要註冊的時候需要怎麼辦呢? 其實很簡單加入指向就行
server:
port: 8001
spring:
application:
name: spring-cloud-common
#註冊中心指向start
eureka:
instance:
instance-id: spring-cloud-common
appname: ${spring.application.name}
client:
service-url:
defaultZone: http://admin:[email protected]:8888/eureka/
#註冊中心指向end