为了解决硬编码的遗留问题,需要服务注册与发现机制来解决这些问题。
服务注册与发现机制的作用:记录每个服务提供者的网络信息,向服务消费者提供所需服务网络信息。
服务提供者,服务消费者,服务发现组件三者之间的关系:
1,每一个为服务启动的时候都会将自己的网络信息注册到服务发现组件中,服务发现组件将这些信息进行存储;
2,服务消费者从服务发现组件中查询服务提供者的网络信息,并使用这些信息对服务提供者进行访问;
3,每个微服务与服务发现组件之间通过存在通信机制,当服务发现组件长时间无法与某微服务进行联系,服务发现组件会将该实例注销;
4,微服务的网络信息进行变更时,会重新注册到服务发现组建中,该服务的调用方无需修改提供者的信息。
服务发现组件基本功能:
1,服务注册表:这是服务发现组件的核心。用来记录各个微服务的信息,包括微服务的名称,IP,端口等。服务注册表提供查询API和管理API,查询API用于查询可用的微服务实例,管理API用于服务的注册与注销;
2,服务注册与发现:
服务注册:微服务启动时将信息注册到服务发现组件中的过程,
服务发现:查询可用的微服务列表及其网络信息的机制
3,服务检查:使用一定的机制检测服务的有效性,如果检测到某微服务已经挂掉会自动将该实例注销。
尤里卡是springcloud提供的一种服务发现组件。
1,尤里卡服务器和尤里卡客户机
尤里卡包含两个组件:尤里卡服务器和尤里卡客户机,二者关系如下:
尤里卡服务器提供了服务发现与注册的机制,微服务启动时会向尤里卡服务器注册自己的信息,尤里卡服务器会将这些信息进行存储。
微服务启动后,会在指定间隔(默认30秒)向服务器发尤里卡送心跳,表明服务正在运行;
如果尤里卡服务器长时间(默认90秒)没有收到来自某微服务的心跳,尤里卡服务器就会注销这个实例;
尤里卡客户缓存了服务注册表的信息。微服务无需每次都向尤里卡服务器查询服务状态,减轻了尤里卡服务器的压力,同时,如果尤里卡服务器挂掉,微服务依然可以从缓存中获取到服务提供者的网络信息并完成调用。
项目结构如下:
添加pom依赖:
& lt; dependency> & lt; groupId> org.springframework.cloud & lt; artifactId> spring-cloud-starter-eureka-server & lt;/dependency>
启动类添加注解:
@SpringBootApplication @EnableEurekaServer//表明自己是一个尤里卡服务器 公开课EurakaApplication { 公共静态void main (String [] args) { SpringApplication.run (EurakaApplication.class, args); } }
yml文件中添加配置:
服务器: 端口:8761 尤里卡: 客户: register-with-eureka:假#表示是否将自己注册到尤里卡服务器中,默认为真的。由于本项目就是一个尤里卡服务器,故此处设为false fetch-registry:假#表示是否从其他尤里卡服务器中获取信息,由于此处为单点服务器尤里卡,设为假即可 服务url: default-zone: #设置与尤里卡服务器的交互地址,查询与注册服务都需要用到该地址,多个地址可以使用”、“分隔
此时启动项目并且访问http://localhost: 8716/,得到如下页面,此时还没有任何微服务注册进来。
四,将微服务注册到尤里卡服务器中
还以用户项目为例:
pom依赖:
& lt; dependency> & lt; groupId> org.springframework.cloud & lt; artifactId> spring-cloud-starter-eureka-server & lt;/dependency>
yml文件:
春: 应用程序: 用户名称:#指定注册到尤里卡服务器中的应用名字 尤里卡: 客户: 服务url: default-zone: http://localhost: 8761/尤里卡/实例: prefer-ip-address:真#是否将自己的IP注册到尤里卡服务器中,如果不配置或设置为假,会将微服务所在的操作系统的主机名注册到尤里卡服务器springCloud入门学习(三):服务注册与发现