詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架
Spring Cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開(kāi)發(fā)工具,它為基于JVM的云應(yīng)用開(kāi)發(fā)中的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競(jìng)選、分布式會(huì)話和集群狀態(tài)管理等操作提供了一種簡(jiǎn)單的開(kāi)發(fā)方式。
Spring Cloud包含了多個(gè)子項(xiàng)目(針對(duì)分布式系統(tǒng)中涉及的多個(gè)不同開(kāi)源產(chǎn)品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等項(xiàng)目。
1.微服務(wù)
微服務(wù)主要包含服務(wù)注冊(cè),服務(wù)發(fā)現(xiàn),服務(wù)路由,服務(wù)配置,服務(wù)熔斷,服務(wù)降級(jí)等一系列的服務(wù),而Spring Cloud為我們提供了個(gè)一整套的服務(wù);

本例子為你提供了最簡(jiǎn)單的一個(gè)服務(wù)發(fā)現(xiàn)例子,包含服務(wù)注冊(cè)發(fā)現(xiàn)spingCloudEurekaServer、服務(wù)配置中心spingCloudConfServer、以及一個(gè)app應(yīng)用springCloudApp
2.服務(wù)注冊(cè)與發(fā)現(xiàn)
spingCloudEurekaServer
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>
<groupId>com.caicongyang</groupId>
<artifactId>spingCloudEurekaServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Angel.SR6</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Application.java
package com.caicongyang.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Spring could EurekaServer程序主入口
*
* @author Administrator
*
*/
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
application.yml (可用properties替代)
server:
port: 9999
eureka:
instance:
hostname: 127.0.0.1
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.服務(wù)配置(全局配置中心)
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>
<groupId>com.caicongyang</groupId>
<artifactId>spingCloudConfServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Angel.SR6</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- sping cloud 注冊(cè)服務(wù) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<defaultGoal>compile</defaultGoal>
</build>
</project>
application.java
package com.caiconyang.conf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* Spring could conf程序主入口
* @author Administrator
*
*/
@SpringBootApplication
@EnableConfigServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
application.properties
server.port=8888 ## App配置文件所在git地址 spring.cloud.config.server.git.uri=https://git.oschina.net/caicongyang/springCloudConfigRepo.git spring.cloud.config.server.git.searchPaths=repo spring.application.name=spingCloudConfServer
4.App
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>
<groupId>com.caicongyang</groupId>
<artifactId>springCloudApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Angel.SR6</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<java.encoding>UTF-8</java.encoding>
<springfox.swagger.version>2.2.2</springfox.swagger.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- sping cloud 監(jiān)控 http://localhost:8080/health -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- sping cloud 注冊(cè)服務(wù) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- sping cloud 路由 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox.swagger.version}</version>
</dependency>
</dependencies>
<build>
<finalName>spingcould</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${java.encoding}</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build>
</project>
Application.java
package com.caicongyang.springCloudApp.main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Spring could web程序主入口
* @author Administrator
*
*/
@Configuration//配置控制
@EnableAutoConfiguration//啟用自動(dòng)配置
@ComponentScan(value={"com.caicongyang.springCloudApp"})//組件掃描
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
//第一個(gè)簡(jiǎn)單的應(yīng)用,
SpringApplication.run(Application.class,args);
}
}
SwaggerConfig.java
package com.caicongyang.springCloudApp.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
*
* @author caicongyang1
* @version id: SwaggerConfig, v 0.1 16/4/22 下午4:12 caicongyang1 Exp $$
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${swagger.ui.enable}") //該配置項(xiàng)在配置中心管理
private boolean environmentSpecificBooleanFlag;
@Bean
public Docket docketFactory() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(
new ApiInfo("接口文檔", "SpingCloud web接口列表", "1.0", "", "", "", "")).enable(environmentSpecificBooleanFlag);
}
}
application.properties
server.port=8080
spring.cloud.config.uri=http://127.0.0.1:8888
spring.cloud.config.name=springCloudApp
spring.cloud.config.profile=${config.profile:dev}
#service discovery url
eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/
#service name
spring.application.name=springCloudApp
5.測(cè)試與驗(yàn)證
順序啟動(dòng)服務(wù)注冊(cè)發(fā)現(xiàn)spingCloudEurekaServer、服務(wù)配置中心spingCloudConfServer、以及一個(gè)app應(yīng)用springCloudApp
測(cè)試與驗(yàn)證
1.訪問(wèn)http://localhost:9999/eureka/ app是否已經(jīng)注冊(cè)上來(lái)
2.訪問(wèn) http://localhost:8080/swagger-ui.html 是否正常訪問(wèn),如果正常訪問(wèn)說(shuō)明爭(zhēng)取讀取到config配置中心的swagger.ui.enable配置項(xiàng)
6.源碼:以上所有源碼:springcloud_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
處理Log4j2不能打印行號(hào)的問(wèn)題(AsyncLogger)
這篇文章主要介紹了處理Log4j2不能打印行號(hào)的問(wèn)題(AsyncLogger),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
java開(kāi)發(fā)validate方法中校驗(yàn)工具類(lèi)詳解
這篇文章主要為大家介紹了java開(kāi)發(fā)validate方法中校驗(yàn)工具類(lèi)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Spring Boot 簡(jiǎn)介(入門(mén)篇)
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。下面通過(guò)本文給大家介紹spring boot相關(guān)知識(shí),需要的的朋友參考下吧2017-04-04
解析Java程序中對(duì)象內(nèi)存的分配和控制的基本方法
這篇文章主要介紹了解析Java程序中對(duì)象內(nèi)存的分配和控制的基本方法,包括計(jì)算對(duì)象的內(nèi)存占用的方法,要的朋友可以參考下2016-04-04
SpringBoot連接Nacos集群報(bào)400問(wèn)題及完美解決方法
這篇文章主要介紹了解決SpringBoot連接Nacos集群報(bào)400問(wèn)題?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
SpringBoot實(shí)現(xiàn)文件在線預(yù)覽功能的全過(guò)程
我們開(kāi)發(fā)業(yè)務(wù)系統(tǒng)的時(shí)候,經(jīng)常有那種文檔文件在線預(yù)覽的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)文件在線預(yù)覽功能的相關(guān)資料,需要的朋友可以參考下2021-11-11
Java手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制
在Java中LRU的實(shí)現(xiàn)方式是使用HashMap結(jié)合雙向鏈表,HashMap的值是雙向鏈表的節(jié)點(diǎn),雙向鏈表的節(jié)點(diǎn)也保存一份key value。2021-05-05

