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();
    }

 

posted @ 2021-09-30 10:02  zuiAI0658  阅读(652)  评论(0)    收藏  举报