Eureka简单部署和原理
Eureka架构
Eureka分为eureka-server 和eureke-client,服务提供者启动时会向eureka-server提供注册信息服务消费者可以通过eureka-server拉取服务信息,拉取的信息可以时多个,通过负载均衡可以进行挑选。服务提供者每30秒向eureka-server发送请求心跳,不跳时候eureka-server会把它剔除,服务消费者不会拉取到不健康的服务信息。
服务调用出现的问题:
1.服务者如何获取提供者的地址信息?
服务提供者启动时会向eureka-server提供注册信息服务消费者可以通过eureka-server拉取服务信息,拉取的信息可以时多个,通过负载均衡可以进行挑选
2.如果有多个消费者,消费者如何选择?
取的信息可以时多个,通过负载均衡可以进行挑选
3.消费者如何得知服务提供者的健康状态?
服务提供者每30秒向eureka-server发送请求心跳,不跳时候eureka-server会把它剔除,服务消费者不会拉取到不健康的服务信息。
在Eureka架构中,微服务角色有两类eureka-server和eureke-client。
eureka-server是服务端和注册中心,负责记录注册信息和心跳监控。
eureke-client是客户端,provider注册信息到注册中心,每30s发送一次心跳,consumer从注册信息拉取服务列表,基于负载均衡,选择服务发起远程调用。
Eureka搭建过程
1.创建项目,引入依赖
<!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.添加注解在application
@EnableEurekaServer
3.添加yml配置
server: port: 10086 #服务端口 spring: application: name: eurekaserver #eureka服务名称 eureka: client: service-url: #eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
Instances currently registered with Eureka 注册到Eureka的实例
Eureka服务注册过程
1.在service项目中引入依赖
<!--引入eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.在service中加入配置
server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver application: userservice #user服务 mybatis: type-aliases-package: cn.itcast.user.pojo configuration: map-underscore-to-camel-case: true logging: level: cn.itcast: debug pattern: dateformat: MM-dd HH:mm:ss:SSS eureka: client: service-url: #eureka的地址信息 defaultZone: http://127.0.0.1:1086/eureka
将service多次启动模拟实例部署,copy configuration 但是为了避免端口冲突 需要修改端口设置
-Dserver.port=8082
服务发现
服务拉取是基于服务名称获取服务列表,然后对服务列表做负载均衡
1.修改service代码,修改url用服务名代替ip和端口
String url = "http://userservice/user/" + order.getUserId();
2.在service的启动类中的RestTemplate添加负载均衡@LoadBalanced
@Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }

浙公网安备 33010602011771号