4
2
0
2

Eureka注册中心的使用

1、Eureka的作用

1.1、消费者该如何获取服务提供者具体信息?

  • 服务提供者启动时向eureka注册自己的信息
  • eureka保存这些信息
  • 消费者根据服务名称向eureka拉取提供者信息

1.2、如果有多个服务提供者,消费者该如何选择?

  • 服务消费者利用负载均衡算法,从服务列表中挑选一个

1.3、消费者如何感知服务提供者健康状态?

  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  • eureka会更新记录服务列表信息,心跳不正常会被剔除
  • 消费者就可以拉取到最新的信息

2、Euraka的角色

2.1 EurekaServer:服务端,注册中心

  • 记录服务信息
  • 心跳监控

2.2 EurekaClient:客户端

2.2.1 Provider:服务提供者

  • 注册自己的信息到EurekaServer
  • 每隔30秒向EurekaServer发送心跳

2.2.2 consumer:服务消费者

  • 根据服务名称从EurekaServer拉取服务列表
  • 基于服务列表做负载均衡,选中一个微服务后发起远程调用

3、Eureka注册中心动手实践

3.1 搭建注册中心

3.1.1 创建项目,引入Eureka服务端依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3.1.2 在启动类上加注解 @EnableEurekaServer

/**
 *  @EnableEurekaServer: 自动装配的开关
 */

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

3.1.3 编写 application.yml文件

server:
  port: 10086 # 服务端口

spring:
  application:
    name: eureka-server  # 微服务名称
eureka:
  client:
    service-url: # eureka 的地址信息, 如果有多个用 逗号 隔开
      defaultZone: http://127.0.0.1:10086/eureka/

3.1.4 启动

3.2 服务注册

3.2.1 在需要注册进Eureka的服务中,引入eureka客户端的依赖

<!-- eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.2.2 在application.yml 编写 服务名称和 eureka地址

spring:
  application:
    name: userserver  # 微服务名称
eureka:
  client:
    service-url: # eureka 的地址信息, 如果有多个用 逗号 隔开
      defaultZone: http://127.0.0.1:10086/eureka/

3.2.3 启动 查看 eureka 注册中心页面即可

3.2.4 多实例启动

我们可以将user-service多次启动, 模拟多实例部署,但为了避免端口冲突,需要修改端口设置

3.3 服务发现

前提: 当前服务已经注册进 eureka 注册中心

3.3.1 在order-service完成服务拉取

  • 服务拉取是基于服务名称获取服务列表
  • 在对服务列表做负载均衡

3.3.2 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:

public Order queryOrderById(Long orderId) {
    // 1.查询订单
    Order order = orderMapper.findById(orderId);

    // 2.利用 restTemplate 发起 http请求,查询用户信息
    // 硬编码
    //String url = "http://localhost:8081/user/" + order.getUserId();
    // Eureka 实现
    String url = "http://USERSERVICE/user/" + order.getUserId();
    User user = restTemplate.getForObject(url, User.class);
    // 3. 封装到order
    order.setUser(user);

    // 4.返回
    return order;
}

3.3.3 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:【默认是:Ribbon的负载均衡】

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建restTemplate对象,并注入
     * @return
     */
    @Bean
    @LoadBalanced  // 负载均衡配置注解
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
posted @ 2021-10-22 21:59  CoderTL  阅读(145)  评论(0编辑  收藏  举报