内容简介:创建
Spring Cloud
封装了 Netflix
公司开发的 Eureka
模块来实现 服务注册和发现
。 Eureka
采用了 C-S
的 设计架构
。 Eureka Server
作为 服务注册中心
,系统中的 其他微服务
,使用 Eureka
的 客户端
连接到 Eureka Server
,并通过 心跳连接
检测服务的 存活状态
。
正文
-
Eureka Server: 作为 服务注册中心 ,提供 服务注册和发现 。
-
Eureka Client: 所有注册到 服务中心 的服务。
-
Service Provider: 把 自身的服务 注册到
Eureka Server,从而使 服务消费方 能够找到。 -
Service Consumer: 从
Eureka Server获取 服务注册列表 ,从而能够 消费服务 。
-
1. 创建服务注册中心
创建 2
个项目 Module
,一个 Module
(即 Spring Boot
)工程作为 服务注册中心
,即 Eureka Server
,另一个作为 Eureka Client
。
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.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>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.ostenant.github.springcloud</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR1</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>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
复制代码
2. 启动服务注册中心
Eureka
是一个 高可用
的组件,它没有 后端缓存
。每一个 实例
注册之后,需要 定时
向 注册中心
发送 心跳
(因此可以在内存中完成)。在默认情况下 Eureka Server
也是一个 Eureka Client
,必须要指定一个 Server
。在启动之前,首先对 Eureka Server
配置 application.yml
文件。
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
复制代码
- eureka.client.register-with-eureka :
设置是否将自己作为 Eureka Client
注册到 Eureka Server
,默认为 true
。
- eureka.client.fetch-registry
设置是否从 Eureka Server
获取 注册信息
,默认为 true
。因为本例是一个 单点
的 Eureka Server
,不需要 同步
其他 Eureka Server
节点的数据,所以设置为 false
。
- eureka.client.service-url.defaultZone
设置的是与 Eureka Server
的 交互地址
, 查询
和 注册服务
都依赖这个地址,如果有多个可以使用 英文逗号分隔
。
然后再把注解 @EnableEurekaServer
加在 Spring Boot
工程的启动类 Application
上面:
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
复制代码
Eureka Server
是有界面的,启动项目后,打开浏览器访问 http://localhost:8761
即可查看。
3. 创建服务提供者
当一个 Eureka Client
向 Eureka Server
发起 注册
时,它会提供一些 元数据
,例如 主机
和 端口
等等。 Eureka Server
从每个 Eureka Client
实例接收 心跳消息
。 如果 心跳超时
,则通常将该实例从 Eureka Server
中删除。
创建一个 service-hi
的 Module
,创建完成后的 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.ostenant.github.springcloud</groupId>
<artifactId>service-hi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>service-hi</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-cloud-starter-web</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>
复制代码
通过 注解
@EnableEurekaClient
表明自己是一个 Eureka Client
。
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
@Value("${server.port}")
private String port;
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
@RequestMapping("/hi")
public String home(@RequestParam String name) {
return "Hi " + name + ", I am from port: " + port;
}
}
复制代码
仅仅 @EnableEurekaClient
是不够的,还需要在 配置文件
中注明的 服务注册中心
的地址, application.yml
配置文件如下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8763
spring:
application:
name: service-hi
复制代码
Eureka
客户端
需要指明 spring.application.name
,用于服务的 唯一标识
, 服务之间
相互调用会基于这个 name
。
启动并访问 Eureka Server
的地址 http://localhost:8761
,会发现服务名称为 SERVICE-HI
,端口为 7862
的服务,已注册到 Eureka Server
的列表上。
3. 高可用Eureka Server
在一个 分布式系统 中, 服务注册中心 是最重要的基础部分,必须处于 可以提供服务 的状态。为了维持其 可用性 ,使用 集群 是很好的解决方案。
Eureka
通过节点 对等注册
的方式实现 高可用的部署
,所以只需要为每一个 Eureke Server
配置 其他可用的
Eureke Server
的 serviceUrl
,就能实现高可用部署。
spring:
profiles:
active: peer1 #peer2
---
spring:
profiles: peer1
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8762/eureka/
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
复制代码
更改 Eureka Server
的配置文件,再分别以 spring.profiles.active=peer1
和 spring.profiles.active=peer2
作为参数,启动两次 Eureka Server
即可。
-
访问
http://localhost:8761/。可以发现,Eureka Client已经向 端口号 为8761的Eureka Server发起注册。 -
服务提供者的 配置文件 并没有向 端口号 为
8762的Eureka Server注册。访问http://localhost:8762/。可以发现, 服务提供者 的信息已经向8762发起注册了,即8761的 注册信息 已经同步到8762节点。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大型网站技术架构演进与性能优化
许令波 / 电子工业出版社 / 2018-6 / 79
《大型网站技术架构演进与性能优化》从一名亲历者的角度,阐述了一个网站在业务量飞速发展的过程中所遇到的技术转型等各种问题及解决思路。从技术发展上看,网站经历了Web应用系统从分布式、无线多端、中台到国际化的改造;在解决大流量问题的方向上,涉及了从端的优化到管道到服务端甚至到基础环境优化的各个层面。 《大型网站技术架构演进与性能优化》总结的宝贵经验教训可以帮助读者了解当网站遇到类似问题时,应如何......一起来看看 《大型网站技术架构演进与性能优化》 这本书的介绍吧!