最近项目使用到了spring boot 与spring cloud搭建的微服务, 现在简单的记录一下怎么去管理这么微服务的技术,简单的使用,有新的见解会持续更新
spring cloud eureka :
一 : 定义 :
服务治理是微服务架构最核心基础的模块, 用来实现各个微服务实例的自动化注册和发现.简单的说就是一个注册中心, 获取服务提供者的服务, 向消费者提供服务

二 : 服务注册 :
在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,包括服务的主机与端口号、服务版本号、通讯协议等一些附加信息。注册中心按照服务名分类组织服务清单,同时还需要以心跳检测的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。
三 : 服务发现 :
在服务治理框架下,服务间的调用不再通过指定具体的实例地址来实现,而是通过服务名发起请求调用实现。服务调用方通过服务名从服务注册中心的服务清单中获取服务实例的列表清单,通过指定的负载均衡策略取出一个服务实例位置来进行服务调用。
四 : 项目中的实际使用 :
1. 注册服务 :
① : 项目描述
本项目是一个spring boot管理的微服务, 有多个子模块, 暂且称为 A - G , 多模块开发难免会从在模块与模块之间的接口调用, 本项目中就使用spring cloud eureka来管理这些服务的注册和调用 .
② : spring boot pom.xml 配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
③ : service-eureka 模块配置

③ : 模块服务的注册和调用 :
启动项使用 @EnableFeignClients 注解可以实现调用其他模块接口的功能 , 既可以在注册中心获取其他模块注册上的接口信息

配置文件中的service-url 指的是service-eureka的地址, 保证我们模块可以注册到eureka上

④ : 启动eureka
本项目使用的是Jenkins自动构建, 后面会写一篇Jenkins的使用

⑤ : 启动其他模块,注册到eureka上

注意 : 有时候这里会出现EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.提示,这是在出现一个服务我们注册多次的提示语 , 这属于一种心跳检测 , 我们可以去强行关闭
在eureka的yml文件上添加 eureka.server.enableSelfPreservation=false
2. 模块之间的服务调用 :
① : 新建一个rpc接口信息类
使用注解@FeignClient(value ="需要调用模块名")

client类中的接口信息就是value 值对应的模块在eureka上注册是服务 , 我们在使用的使用直接自动注入这个client, 调用接口即可
五 : 添加eureka注册中心的访问权限 :
为了防止第三方人员访问注册中新的服务,我们添加权限的管理
1. 注册中心添加依赖
<!-- 添加注册中心权限依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 在注册中心服务添加bootstrop.yml文件,内容如下
security:
basic:
enabled: true
user:
name: <span style="color:#009900;">admin</span>
password: <span style="color:#009900;">admin</span>
3.在需要注册的客户端服务application.properties文件中配置注册中心地址中加入访问的用户名和密码
eureka.client.serviceUrl.defaultZone=http://admin:admin@${eureka.instance.hostname}:7070/eureka/
网友评论