zoukankan      html  css  js  c++  java
  • spring cloud (三) ——eureka

    eureka是springcloud Netflix下的一个组件,现已停止维护

    其作用用来做服务发现与治理,可替代的产品也有很多如zookeeper,nacos

    简单示意图:

    eureka-client的服务都会注册到eureka server中,并且会缓存到客户端,当user-service调用order-service会根据key找到对应的服务

    eureka server会通过心跳机制来检测服务是否处于可用状态

    eureka提供dashboard来监控客户端服务

    1、基本使用

    1.1、搭建eureka server

    使用父子工程来搭建项目:

    idea 父子工程项目

    eureka server工程的pom文件中引入依赖,注意版本冲突问题,这里选择的是2.2.1,springboot是2.3.1

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

     在启动类上加上@EnableEurekaServer注解

     配置文件:这里只配置了端口号和服务名

    server.port=8761
    spring.application.name=eureka-server-8761

    启动,访问:http://localhost:8761/,进入到eureka的控制面板上,目前只有一个自己一个服务,我们再创建user-service和order-service服务。

     目录结构:user-service和order-service服务都需要导入eureka-client依赖,注意版本号问题

    <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>

     user-service配置文件:

    server.port=9090
    spring.application.name=user-service-9090
    //指定eureka服务端地址
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka

     order-service配置文件:

    server.port=9091
    spring.application.name=order-service-9091
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka

    启动两个服务

    查看dashboard:

    这样一个简单得eureka服务就搭建完成了。

    1.2、服务调用

    使用user-service去访问order-service服务。

    user-service:创建一个UserController:

    @RestController
    @RequestMapping("user")
    public class UserController {

    @Autowired
    private RestTemplate restTemplate;
    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
    return new RestTemplate();
    }

    @GetMapping("/user/{userId}")
    public String getOrderByUser(@PathVariable("userId") Long userId){
    return restTemplate.getForObject("http://order-service/order/list",String.class);
    }
    }

    order-service:创建一个OrderController:

    @RestController
    @RequestMapping("order")
    public class OrderController {
    
        @GetMapping("/list")
        public String listOrders(){
            System.out.println("——————被调用了——————");
            return "order-service 被调用了 " + LocalDateTime.now();
        }
    }

    测试:访问http://localhost:9090/user/user/1

    页面结果

    order-service 被调用了 2020-07-15T21:30:57.533

    这样就完成了eureka服务调用。

    注意点:

    1、eureka-server的启动类上加上@EnableEurekaServer注解

    2、发送restTemplate请求注意加上@LoadBalanced

    3、客户端导入eureka-client,服务端导入eureka-server ,注意版本号问题

    1.3、eureka结合ribbon使用

    在eureka中已经整合了ribbon,所以可以直接使用ribbon的功能,ribbon的使用spring cloud (一) ——ribbon

    在不使用eureka前,在ribbon中,我们在user-service中的配置

    文件中加入需要访问的服务列表,例如这样:

    # 配置指定服务的提供者的地址列表
    orderservice.ribbon.listOfServers=
      localhost:8080,localhost:8081,localhost:8082

    而这里我们就可以从eureka的服务中心去获取,然后缓存,所以我们无需写这一行的配置,上面的案例已经实现

    了eureka和ribbon的整合,只不过order-service只启动了一个服务,如果我们启动多个order-service服务,那么@LoadBalanced

    注解的作用就会很明显了。

    测试:

    当我们访问5次时,发现9091访问了2次,发现9092访问了2次,发现9093访问了1次

    ribbon默认的负载策略是轮询策略。

    2、原理及源码解析

  • 相关阅读:
    windows环境下封装条件wait和signal
    windows环境利用semophore机制进行线程同步
    Udp打洞原理和源代码。
    ECONNRESET和WSAECONNRESET怎么产生的以及如何避免
    网络编程一些常见问题总结
    Redis
    Django框架(三十)—— 使用Vue搭建前台
    前端(二十三)—— Vue环境搭建
    Django框架(二十九)—— 跨域问题
    Django框架(二十八)—— Django缓存机制
  • 原文地址:https://www.cnblogs.com/tdyang/p/13294163.html
Copyright © 2011-2022 走看看