SpringCloud是基于SpringBoot基础之上开发的微服务框架,SpringCloud是一套目前非常完整的微服务解决方案框架,其内容包含服务治理、注册中心、配置管理、断路器、智能路由、微代理、控制总线、全局锁、分布式会话等。
这一篇先介绍什么是服务治理、注册中心(Eureka)。
官方的介绍在这里Eureka wiki。Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
什么是服务治理
在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
服务注册与发现
在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,让后在实现本地rpc调用远程。
在我看来,Eureka的吸引力来源于以下几点:
开源:大家可以对实现一探究竟,甚至修改源码。
可靠:经过Netflix多年的生产环境考验,使用应该比较靠谱省心
功能齐全:不但提供了完整的注册发现服务,还有Ribbon等可以配合使用的服务。
基于Java:对于Java程序员来说,使用起来,心里比较有底。
spring cloud可以使用Spring Cloud, 与Eureka进行了很好的集成,使用起来非常方便。
一、下面简单的写一个dome(Eureka 服务端)
这里我们展示Eureka1.X版本的,因为Eureka 2.X已经闭源了~~~~~~~
1.创建项目引入一下依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sprongcloud2.0-Eureka</artifactId>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--SpringCloud eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2.配置application.yml 文件
#服务端口
server:
port: 8882
#服务别名
spring:
application:
name: Eureka
eureka:
instance:
#服务注册中心实例的主机名
hostname: localhost
client:
#是否开启将自己作为服务注册
registerWithEureka: false
#是否检索服务
fetchRegistry: false
# server:
# enableSelfPreservation: false
#服务注册中心的配置内容,指定服务注册中心的位置
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.启动类
@SpringBootApplication
@EnableEurekaServer
public class Eureka02App {
public static void main(String[] args) {
SpringApplication.run(Eureka02App.class,args);
}
}
4.面板信息
到这里一个简单Eureka 服务注册中心就配置完成了。
二、接下来搭建一下Eureka 的客户端:
1.同服务端一样,引入maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sprongcloud2.0-Eureka</artifactId>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot-整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringCloud eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>
2.0.2.RELEASE
</version>
</dependency>
</dependencies>
2.配置Eureka配置文件
#服务端口
server:
port: 8881
#服务别名
spring:
application:
name: Eureka-client
eureka:
client:
#服务注册中心实例的主机名
service-url:
defaultZone: http://localhost:8882/eureka
#是否开启将自己作为服务注册
registerWithEureka: true
#是否检索服务
fetchRegistry: true
3.这样简单的一个eureka客户端就基本搭建完了,启动一下(注:在启动类中一定要开启Eureka客户端 @EnableEurekaClient)
@SpringBootApplication
@EnableEurekaClient
public class eurekaClientApp {
public static void main(String[] args) {
SpringApplication.run(eurekaClientApp.class,args);
}
}
4.在Eureka 服务端可以看到Eureka 客户端服务已经注册8882端口的注册中心