Eureka注册中心
作者:互联网
服务远程调用问题
public Order queryById(Long id){ Order order = orderMapper.findById(id); String url = "http://localhost:8081/user/"+order.getUserId(); User user = restTemplate.getForObject(url, User.class); order.setUser(user); return order; }
- 出现硬编码
- 如果有多个服务提供者,消费者如何选择
- 消费者如何得知服务提供者的状态
服务提供者:一次业务处理过程中,被其它微服务调用的服务(提供接口给其它微服务)
服务消费者:一次业务处理过程中,调用其它微服务的服务(调用其它微服务提供的接口)
Eureka注册中心
Eureka工作流程
1、每一个微服务(服务的提供者和消费者)启动时,就必须向eureka-server中注册自身服务信息
2、当服务消费者需要服务提供者时,会去eureka-server中拉起服务提供者(服务提供者状态都是良好的)的信息
3、服务消费者可以通过负载均衡获取一个服务提供者的信息,远程调用即可
微服务会定期向eureka-server发送心跳,如果不发送,eureka-server就会移除其服务信息
Eureka作用
- 消费者该如何获取服务提供者具体信息?
- 服务提供者启动时向eureka注册自己的信息
- eureka保存这些信息
- 消费者根据服务名称向eureka拉取提供者信息
- 如果有多个服务提供者,消费者该如何选择?
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
- 消费者如何感知服务提供者健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
- eureka会更新记录服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
搭建Eureka
在Eureka架构中,微服务角色有两类:
- EurekaServer:服务端,注册中心
- 记录服务信息
- 心跳监控
- EurekaClient:客户端
- Provider:服务提供者
- 注册自己的信息到EurekaServer
- 每隔30秒向EurekaServer发送心跳
- consumer:服务消费者
- 根据服务名称从EurekaServer拉取服务列表
- 基于服务列表做负载均衡,选中一个微服务后发起远程调用
- Provider:服务提供者
搭建EurekaServer
创建项目,添加eureka服务端依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>View Code
编写启动类,开启EurekaServer(@EnableEurekaServer)
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class,args); } }View Code
添加application.yml文件
server: port: 10081 #eureka服务注册 spring: application: name: eurekaserver #eureka服务名 eureka: client: service-url: #eureka地址信息 defaultZone: http://localhost:10081/eureka
eureka也是个微服务,并把自己也注册到eureka,可以实现eureka集群
defaultZone可以有多个eureka地址信息,中间以逗号隔开
注意:端口号为10080时,会失败,不知到为什么
微服务注册
在微服务项目中添加eureka客户端依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
配置注册信息(微服务名、eureka地址)
server: port: 8081 spring: datasource: url: jdbc:mysql://192.168.223.129:3306/cloud-user?useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver application: name: userservice mybatis: type-aliases-package: com.marw.pojo configuration: map-underscore-to-camel-case: true eureka: client: service-url: defaultZone: http://localhost:10081/eureka/View Code
将user-service多次启动,模拟多实例部署,为了避免端口冲突,需要修改端口号
-DServer.port=8083
服务发现
修改访问的url路径,用注册到eureka的服务名替换ip和端口
String url = "http://userservice/user/"+order.getUserId();
在实例化RestTemplate方法上添加负载均衡注解(@LoadBalanced)
@Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }
测试效果:
分别访问 http://localhost:8082/order/101 、http://localhost:8082/order/102
标签:服务,中心,url,server,eureka,EurekaServer,注册,服务提供者,Eureka 来源: https://www.cnblogs.com/WarBlog/p/15393521.html