Eureka的作用
使用RestTemplate
完成远程调用需要被调用者 的ip和端口,从而能够发起http请求,但是如果有很多个实例也更加不能有效的处理,而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。
- 服务注册:服务提供者实例启动后会把自己的信息注册到eureka中,eureka会将服务名称与服务实例之间的映射关系
- 服务发现:服务消费者会根据服务名称拉取服务的时候会根据映射关系找到对应的实例
- 负载均衡:服务消费者消费者从实例列表中利用负载均衡算法选中一个实例地址
- 健康检测:服务提供者每隔一段时间会向eureka发生心跳,来证明自己存活,可以被调用
Eureka的使用
Eureka服务搭建
1)引入依赖
我们需要一个一个maven项目,单独作为eureka服务,导入依赖:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2)配置文件
yml
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka
3)启动类
给该项目的启动类添加@EnableEurekaServer
注解。
4)启动项目并进行验证
服务注册
1)依赖引入
需要引入eureka-client的依赖
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2)配置文件
添加服务名称、eureka地址:
yml
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
3)启动多个实例
服务发现
1)依赖引入
需要引入eureka-client的依赖
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2)配置文件
服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息,添加服务名称、eureka地址:
yml
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
3)服务拉取
这里的ip+端口需要变成我们服务注册的时候的服务名称。
并且需要给调用者的RestTemplete加上@LoadBalanced
注解开启负载均衡。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Ribbon负载均衡
SpringCloud的负载均衡是通过一个Ribbon的组件来实现的。
我们使用postman多进行几次测试,会发现user服务的两个实例都被调用了,如图所示