文章目录
初识SpringCloud
什么是springcloud
1.springcloud是spring官方开发维护的,基于springboot开发,提供一套完整的微服务解决方案.
2.包括服务注册与发现,配置中心,全链路监控,API网关,熔断器等选型中立的开源组件,可以随需扩展和替换组装
springcloud的项目模块
组件名称 | 所属项目 | 组件分类 |
---|---|---|
Eureka | spring-cloud-netflix | 注册中心 |
zuul | spring-cloud-netflix | 第一代网关 |
Sidecar | spring-cloud-netflix | 多语言 |
Hystrix | spring-cloud-netflix | 负载均衡 |
Turbine | spring-cloud-netflix | 熔断器 |
Eureka | spring-cloud-netflix | 集群监控 |
Feign | spring-cloud-openfeign | 声明式HTTP客户端 |
Consul | spring-cloud-consul | 注册中心 |
Gateway | spring-cloud-gateway | 第二代网关 |
Sleuth | spring-cloud-sleuth | 链路追踪 |
Config | spring-cloud-config | 配置中心 |
Bus | spring-cloud-bus | 消息总线 |
Pipeline | spring-cloud-pipeline | 部署管道 |
Dataflow | spring-cloud-dataflow | 数据处理 |
Eureka简介
Eureka是netflix公司开源的一款服务发现组件,该组件提供的服务发现可以为负载均衡,failover等提供支持
Eureka包括Eureka Server和Eureka Client
Eureka Server提供REST服务,而Eureka Client则是使用java编写的客户端,用于简化与Eureka Server的交互
Eureka入门案例
创建一个普通的springboot工程
这里就不创建父工程了,我始终觉得这样有违微服务的初衷,选择依赖如下
maven依赖如
cloud版本就选择格林威治(
Greenwich.SR1
)了,springboot我们选择最新版的2.1.4发行版
一是我觉得这个读起来顺口,
二是该版本对应的springboot版本为2.x
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.apdoer</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</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>
配置我们的启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
@EnableEurekaServer表示应用为eureka server端
配置我们的配置文件
server:
port: 10086
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
配置文件详解
这里我将properties配置文件改成了yml
server.port
: 启动的端口号,没什么好说的
eureka.instance.hostname
: 设置该eureka服务注册中心的hostname,如果你想配成自定义的,需要去配置本地域名映射
eureka.client.register-with-eureka
: 是否在注册中心中注册自己,当前的注册中心也是一个springboot项目,默认为true,false为不注册自己
eureka.client.fetch-registry
: 表示不去检索其他服务,注册中心的职责是维护服务实例,不需要检索其他服务,当然,你也可以设置成true
测试
访问
localhost:10086
,可以看到 注册中心已经启动成功了,但是目前没有应用注册上来
注册服务
搭建好注册中心后,我们可以尝试在注册中心注册一个服务
创建一个服务
- 新建springboot工程,添加依赖如下
- 启动类我们加上开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Server1Application {
public static void main(String[] args) {
SpringApplication.run(Server1Application.class, args);
}
}
- 配置文件如下
spring:
application:
name: server_one
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka
配置文件很简单
spring.application.name : 定义服务名,这里最好指定以下名称,不然在eureka server界面会显示为unknown
eureka.client.service-url.defaultZone : 注册中心地址
- 然后我们启动项目,果然出问题了,项目启动不了,是不是看不出来哪里有问题
解决问题
- 我们加上web的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
- 再启动项目和注册中心访问
localhost:10086
- 我们也可以访问 eureka server的 rest api接口,比如
http://localhost:10086/eureka/apps
返回如下结果
注册成功!!!
总结
到这里,我们的简易注册中心就搭建好了,并且也有一个实例service-one注册上去了
但是这个注册中心只是一个学习版,并不能用于生产环境,
如同zookeeper一样,注册中心在项目中的作用非常重要,一旦挂掉整个服务就瘫痪了,我们将在后面介绍如何搭建高可用注册中心
本章代码在git地址 链接