注意:我的笔记很多来源于翟永超老师写的《Spring Cloud 微服务实战》,一些资料来源于百度!如果本笔记有错误,请私信给我谢谢!
一、
Spring Cloud Eureka简介
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务治理可以说是微服务架构中最为核心和基础的模块,他主要用来实现各个微服务实例的自动化注册与发现
- 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按照服务名分类组织服务清单,服务注册中心还需要以心跳的方式去监控清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。
- 服务发现:由于在服务治理框架下运行,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。
Spring Cloud Eureka 使用 Netflix Eureka 来实现服务注册与发现,即包括了服务端组件,也包含了客户端组件,并且服务端和客户端均采用Java编写,所以Eureka主要适用与通过Java实现的分布式系统,或是与JVM兼容语言构建的系统,但是,由于Eureka服务端的服务治理机制提供了完备的RESTful API,所以他也支持将非Java语言构建的微服务纳入Eureka的服务治理体系中来。
- Eureka服务端:我们也称为服务注册中心,他同其他服务注册中心一样,支持高可用配置。
- Eureka客户端:主要处理服务的注册和发现,客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新他的服务租约。
- 搭建服务注册中心
创建一个基础的 Spring Boot 工程,在 pom.xml 中引入必须的依赖内容 spring-cloud-starter-eureka-server ,通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话
二、搭建服务注册中心
首先创建一个SpringBoot工程,命名为eureka-server,并在pom.xml中引入必要的依赖内容,代码如下:
<?
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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<
modelVersion
>
4.0.0
</
modelVersion
>
<
groupId
>
com.wl.test
</
groupId
>
<
artifactId
>
eureka-server
</
artifactId
>
<
version
>
0.0.1-SNAPSHOT
</
version
>
<
packaging
>
jar
</
packaging
>
<
name
>
eureka-server
</
name
>
<
description
>
Demo project for Spring Boot
</
description
>
<parent>
<
groupId
>
org.springframework.boot
</
groupId
>
<
artifactId
>
spring-boot-starter-parent
</
artifactId
>
<
version
>
1.5.10.RELEASE
</
version
>
<
relativePath
/>
<!-- lookup parent from repository -->
</parent>
<properties>
<
project.build.sourceEncoding
>
UTF-8
</
project.build.sourceEncoding
>
<
project.reporting.outputEncoding
>
UTF-8
</
project.reporting.outputEncoding
>
<
java.version
>
1.8
</
java.version
>
<
spring-cloud.version
>
Dalston.SR5
</
spring-cloud.version
>
</properties>
<dependencies>
<dependency>
<
groupId
>
org.springframework.cloud
</
groupId
>
<
artifactId
>
spring-cloud-starter-eureka-server
</
artifactId
>
</dependency>
<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
>
${spring-cloud.version}
</
version
>
<
type
>
pom
</
type
>
<
scope
>
import
</
scope
>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<
finalName
>
eureka-server
</
finalName
>
<plugins>
<plugin>
<
groupId
>
org.springframework.boot
</
groupId
>
<
artifactId
>
spring-boot-maven-plugin
</
artifactId
>
</plugin>
</plugins>
</build>
</project>
|
通过
@EnableEurekaServer
注解启动一个服务注册中心提供给其他应用程序进行对话:
在默认的情况下,该服务中心也会将自己作为客户端来尝试注册自己,所以我们需要禁用他的客户端注册行为:
spring.application.name 是一个很重要的参数,他标明了服务的名称(不是实例的名称),消费者可以通过该名称调用实例!
其中Instances currently registered with Eureka是空的,说明该注册中心还没有注册任何服务!
三、注册一个服务提供者
新建一个maven工程:eureka-service-hello,pom.xml文件里面填写:
<?
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.wl.test
</
groupId
>
<
artifactId
>eureka-service-hello
</
artifactId
>
<
version
>0.0.1-SNAPSHOT
</
version
>
<
packaging
>jar
</
packaging
>
<
name
>eureka-service-hello
</
name
>
<
description
>Demo project for Spring Boot
</
description
>
<
parent
>
<
groupId
>org.springframework.boot
</
groupId
>
<
artifactId
>spring-boot-starter-parent
</
artifactId
>
<
version
>1.5.10.RELEASE
</
version
>
<
relativePath
/>
<!-- lookup parent from repository -->
</
parent
>
<
properties
>
<
project.build.sourceEncoding
>UTF-8
</
project.build.sourceEncoding
>
<
project.reporting.outputEncoding
>UTF-8
</
project.reporting.outputEncoding
>
<
java.version
>1.8
</
java.version
>
<
spring-cloud.version
>Edgware.SR2
</
spring-cloud.version
>
</
properties
>
<
dependencies
>
<
dependency
>
<
groupId
>org.springframework.boot
</
groupId
>
<
artifactId
>spring-boot-starter-web
</
artifactId
>
</
dependency
>
<
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
>
<
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
>
|
不同eureka-server工程的,本工程的依赖是:spring-cloud-starter-eureka,eureka-server是:spring-cloud-starter-eureka-server,本工程还增加一个web依赖!
创建HelloController:
配置application.yml文件
在启动类上注解
@EnableDiscoveryClient
或者
@EnableEurekaClient
表示可以发现服务:
注意:@EnableEurekaClient和@EnableDiscoveryClient
spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等),@EnableDiscoveryClient基于spring-cloud-commons, @EnableEurekaClient基于spring-cloud-netflix。
其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,也可以使用@
EnableDiscoveryClient
,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient
启动注册中心,启动服务提供者!
注册中心启动后,启动服务提供者,注册中心会打印以下log:
可以看见有一个名字为EUREKA-SERVICE-HELLO的服务了,状态是up!
我们鼠标移到链接上面:
我们可以通过设置将该连接设置成ip加端口的形式,更加直观!(注意这个连接名字叫做 instance_id)
显示的是: