目录
前言
博主是技术小白,最近在学习Spring Cloud,这篇博客也是博主结合网上看到的教程以及博主觉得对大家有用的一些知识的整合,博客中Spring Boot的版本是2.0.3.RELEASE;Spring Cloud的版本是Finchley.RELEASE。
本文采用的开发工具是IntelliJ IDEA 2018.3.5
Finchley版本的官方文档:
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
一、什么是Spring Cloud
1.1、Spring Cloud简介
Spring Clode是一系列框架的有序集合;它利用Spring Boot的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现与注册、配置中心、消息总线、负载均衡、断路器数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署;Spring Cloud并没有重复制造轮子,他只是将目前各公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再次封装,屏蔽掉了复杂的配置和实现的原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
1.2、Spring Cloud组成
Sping Cloud的子项目大致可分为两类,一类是对现有成熟框架“Spring Boot化”的封装和抽象,也就是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是Kafka,ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目已经足够使用了,如:
1、Spring Cloud Netflix: 是对Netfilx开发的一套分布式服务框架的封装,包括服务的发现与注册、负载均衡、断路器、REST客户端、请求路由等。
2、Spring Cloud Bus: 是对Kafka、MQ的封装。
3、Spring Cloud Security: 是对Spring Security的封装,并能配合Netflix使用。
4、Spring Cloud Zookeeper: 对Zookeeper的封装,使之能配置其他的Spring Cloud的子项目使用。
5、Spring Cloud Eureka 是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务框架中的服务治理功能。
二、创建服务注册中心
2.1、新建Maven主项目
由于本文需要创建多个项目,为了项目之间避免重复引入相同的jar包,这里采用Modules项目模式进行的开发,新建一个Maven主项目,我们可将项目之间都会用到的jar包引入到这个主项目的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yangx.springcloud</groupId>
<artifactId>yangx-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>yangx-springcloud-eureka</name>
<description>Demo project for Spring Boot</description>
<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>eureka-client</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>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</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>Finchley.RELEASE</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
2.2、新建一个Module工程-服务注册中心(Eureka Server)
这里给大家演示一下怎么新建Module项目,详细步骤如下:
右键工程 > 选择Module
选择Spring Initializr > Next
选择Cloud Discovery > 勾选Eureka Server > Next
创建好项目后我们可以发现该项目自动引入了主项目,并引入了spring-cloud-starter-netflix-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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yangx.springcloud</groupId>
<artifactId>eureka-server</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>EurekaServer</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.yangx.springcloud</groupId>
<artifactId>yangx-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
</project>
2.3、启动-服务注册中心
Eureka 是一个高可用的组件,它没有后端缓存,每一个客户端注册后会向服务中心发送心跳(可在内存中完成),默认情况下Eureka Server 即是 Eureka Client,必须要指定它为Server,application.yml配置如下:
server:
port: 8080
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #是否注册到Eureka Service;默认为true;
fetch-registry: false #是否从Eureka Service拉取信息;默认为true;
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eureka-server
这里register-with-eureka与fetch-registry都为false,因为它自己就是Eureka Server
在启动类上加上@EnableEurekaServer注解,表示该工程是Eureka Server
package com.yangx.springcloud.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaEerverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaEerverApplication.class, args);
}
}
启动后,打开浏览器访问“http://localhost:8080”,界面如下:
No instances available :没有服务被发现;因为我们还没有注册服务
2.3、新建-服务提供者(Eureka Client)
当Client向Server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 接收每个Client实例的心跳消息。如果某Client心跳超时,则将该Client从注册中心删除。
创建过程可同上,只需将spring-cloud-starter-netflix-eureka-server的依赖改为spring-cloud-starter-netflix-eureka-client,如果各位有什么更简便的方式欢迎在下方评论,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.yangx.springcloud</groupId>
<artifactId>eureka-client</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>EurekaClient</name>
<description>demo project for Spring Boot</description>
<parent>
<artifactId>yangx-eureka</artifactId>
<groupId>com.yangx.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
通过@EnableEurekaClient注解表示它是一个Eureka Client
package com.yangx.springcloud.eureka.client;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaClientApplication {
public static void main(String[] args){
SpringApplication.run(EurekaClientApplication.class,args);
}
@Value("${server.port}")
String port;
@GetMapping("hello")
String hello(@RequestParam String name){
return "Hello "+ name +"! I am from port " + port;
}
}
除此之外,它还需要在application.yml文件中指定它要注册的服务中心地址;配置如下:
server:
port: 8081
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:8080/eureka/
spring:
application:
name: eureka-client #这个配置很重要,服务与服务之间的相互调用一般都是name来实现
启动Eureka Server,再次访问“http://localhost:8080”:
你会发现一个服务已经注册在服务中了,服务名为EUREKA-CLIENT ,端口为8081来自于DESKTOP-57N4973
访问http://localhost:8081/hello?name=yangx:
https://blog.csdn.net/forezp/article/details/81040925
本文出自方志朋的博客