SpringCloud(二.1)Eureka服务的搭建与使用
什么是Eureka?
在上一篇微服务项目远程调用,我们学到了注册RestTemplate,利用RestTemplate发送http请求,从而得到想要的数据。
但是这里的写法有一些问题,URL的地址是写死的。
如果以后有各种环境,比如:本地环境、测试环境、生产环境。不可能每次都来这里配置URL地址。
再比如:如果以后为了高并发,User微服务可能会部署成多实例形成一个集群。每个实例都有自己的端口,user-service1 是8081、 user-service2 是8082 、user-service3 是8083 等等。写死的话该写哪个地址,怎么保证写的地址是通的没有挂掉?
这里就会用到 Eureka服务 来记录和管理这些服务,每一个微服务在启动的那一刻会把自己的信息注册给 Eureka服务。Eureka服务会把这些信息记录下来 地址、端口。
并且微服务每隔30s会向Eureka发送一次心跳,Eureka会更新记录服务列表信息,如果心跳不正常就会把此服务信息地址给踢除。
这也就保证了Eureka中保存的每个微服务的信息都是通的,可用的。
这时如果 订单的微服务 想要调用消费 用户微服务的接口。直接从Eureka服务拉取用户服务的信息。
搭建EurekaServer
EurekaServer也是一个微服务项目,搭建好项目第一件事就是先把自己注册进去(第三步eureka)。
<!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
server: port: 10086 # 服务端口 spring: application: name: eurekaserver # eureka的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
把其它微服务注册到EurekaServer只需要两步,引入eureka依赖,然后在yml配置文件中配置eureka地址(application和eureka)。
在order-service完成服务拉取
如果userservice有多个实例,这里拉取到的服务是通过Ribbon默认的负载均衡模式随机轮巡分配的地址
原理如图:
配置变更负责均衡规则
Ribbon饥饿加载配置