Eureka的服务治理体系

服务治理是微服务架构的核心和基础,主要的功能是服务的注册和服务发现。

Eureka组件可以承担SpringCloud中的服务治理功能




spring中的桥接模式应用 spring 端口_服务治理


从图中可以看到,Eureka分为两部分。一个是EurekaServer,即注册中心,一般在生产环境上我们会搭建多个注册中心以实现高可用。每个服务单元向注册中心登记自己提供的服务,包括服务的主机与端口号、服务版本号、通讯协议等一些附加信息。注册中心按照服务名分类组织服务清单,同时还需要以心跳检测的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。

另一个是Eureka Client,它是嵌入在客户端应用代码里,当应用启动时,向注册中心注册自己提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。


spring中的桥接模式应用 spring 端口_服务治理_02


下面先搭建一个箱单的项目体验一下

1,创建一个工程


spring中的桥接模式应用 spring 端口_springcloud 当前服务端口号_03


spring中的桥接模式应用 spring 端口_服务治理_04


先不急着选springcloud相关组件。

我们先创建一个父pom工程。lombok是我个人比较喜欢用的,简化代码的用处,非必须。


spring中的桥接模式应用 spring 端口_Server_05


将src目录删掉,我们并不需要

2,创建服务注册中心


spring中的桥接模式应用 spring 端口_Server_06


填好基础信息,下一步


spring中的桥接模式应用 spring 端口_服务治理_07


选择Eureka Server,此处先用最常用的Eureka。关于Consul以后再讲

3,启动一个Eureka Server


spring中的桥接模式应用 spring 端口_服务端_08


启动一个Eureka Server非常简单,

只需要在启动类上加@EnableEurekaServer注解

然后修改一下配置文件

server: port: 8761eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

解释:

registerWithEureka:是否要将自身的实例信息注册到Eureka服务端。默认是true。这里要改成false。因为现在就是在配置server。如果设置为true,会报一个自己给自己注册的异常。

fetchRegistry:是否从Eureka服务端获取注册信息。默认是true。同样道理这里也要改为false。

serviceUrl.defaultZone:配置的是注册中心的地址。以便client找到。可以配置多个,并且也应该配置多个,做集群。后面再演示。

打开8761页面,可以看到,现在还没有服务注册上来


spring中的桥接模式应用 spring 端口_springcloud 当前服务端口号_09


4,启动一个客户端

再建一个工程,eureka-client

需要演示web服务提供功能,所以创建项目时选上web依赖。

eureka的客户端,及服务提供者,需要选上Eureka-Discovery依赖


spring中的桥接模式应用 spring 端口_springcloud 当前服务端口号_10


代码:

@SpringBootApplication@EnableEurekaClientpublic class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); }}

配置文件:

eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/server: port: 8762spring: application: name: service-helloworld

写一个测试服务

@RestControllerpublic class HelloController { @GetMapping("/hello/{name}") public String hello(@PathVariable String name) { return "hi " + name; }}

启动:

访问localhost:8761页面:


spring中的桥接模式应用 spring 端口_服务治理_11


看到服务已经注册上来了

这里的application的名字,就是我们配置的应用名

好,现在搭起了最简单的一个注册中心,一个服务提供者。

下一篇写注册中心集群。