Eureka入门学习--含实现案例

Eureka入门学习–含实现案例

1、什么是eureka

参考博客:参考参考,看看别人的博客
1)参考一

2)参考二

3)参考三

在这里插入图片描述

2、SpringBoot + Eureka+Feign:Eureka注册中心搭建、服务注册发现、服务间调用

一个Server:注册中心、两个Client Demo: Client2 调用 Client1

2.1服务注册中心的搭建

创建springboot项目,导入相应依赖 pom.xml

<!--web或其他的依赖省略-->
<!--eureka 服务端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

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

application.yml配置文件

server:
  port: 8888

eureka:
  instance:
    hostname: localhost  #服务注册中心实例的主机名
  server:
    wait-time-in-ms-when-sync-empty: 0
    enable-self-preservation: false
  client:
    register-with-eureka: false #是否向服务注册中心注册自己
    fetch-registry: false #是否检索服务
    service-url:
      defaultZone: http://${
    
    eureka.instance.hostname}:${
    
    server.port}/eureka/
      #http://localhost:8888/eureka/ #服务注册中心的配置内容,指定服务注册中心的位置

spring:
  application:
    name: eureka-server

启动类 EurekaServerApplication

@SpringBootApplication
@EnableEurekaServer  //核心注解,表示启动EurekaServer,必须要加上该注解
public class EurekaServerApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

启动该项目:
在这里插入图片描述

2.2 eureka-client-1搭建

创建springboot项目,导入相应依赖 pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

application.yml配置文件

spring:
  application:
    name: eureka-client-1
    
#eureka注册中心的地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
      
server:
  port: 8001

启动类 EurekaClient1Application

@SpringBootApplication
@EnableEurekaClient  # eureka client开启注解
public class EurekaClient1Application {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(EurekaClient1Application.class, args);
    }
}

创建一个RestAPI,供client2调用

@RestController
@RequestMapping("/test")
public class TestApiController {
    
    
    @GetMapping("/get/{msg}")
    public String getTestFeign(@PathVariable("msg") String msg){
    
    
        return "client1:TestController:getTestFeign方法接收到参数:"+msg;
    }
}

启动client1服务,发现client1服务已被注册到注册中心
在这里插入图片描述

2.3 eureka-client-2搭建

创建springboot项目,导入相应依赖 pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--eureka 客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--因为 client2 需要 feign 远程调用 client1,所以导入此依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

application.yml配置文件

server:
  port: 8002

spring:
  application:
    name: eureka-client-2
    
# eureka注册中心的地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/

启动类 EurekaClient2Application

@SpringBootApplication

@EnableEurekaClient # eureka client开启注解

@EnableFeignClients # feign 调用开启注解
public class EurekaClient2Application {
    
    

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

}

创建以下目录结构:
在这里插入图片描述
EurekaFeignClient

@Component
@FeignClient(value = "eureka-client-1")  //@FeignClient注解的 value属性值:注册中心中 client1 的名字:eureka-client-1
public interface EurekaFeignClient {
    
    
    
    //该方法的返回参数、@GetMapping中的路由、方法中的参数 需要与 eureka-client-1 被调用接口的一致
    //该方法类似于 eureka-client-1  --> @RequestMapping("/test") public class TestApiController  -->  @GetMapping("/get/{msg}") public String getTestFeign(@PathVariable("msg") String msg) 的一个代理
    @GetMapping("/test/get/{msg}")  
    public String getFeignFeignClient(@PathVariable("msg")String msg);
    
}

FeignTestController

//就是一个用于测试的普通Controller
@RestController
@RequestMapping("/feign_test")
public class FeignTestController {
    
    
    
    //依赖注入了 EurekaFeignClient
    @Autowired
    private EurekaFeignClient eurekaFeignClient;

    @GetMapping("/call/{msg}")
    public String testFeignCall(@PathVariable("msg") String msg){
    
    
        //调用了EurekaFeignClient 的getFeignFeignClient方法
        String feignFeignClient = eurekaFeignClient.getFeignFeignClient(msg);
        return feignFeignClient;
    }
}

启动client2服务,发现client2服务已被注册到注册中心
在这里插入图片描述

调用测试client2中的 FeignTestController#testFeignCall方法
在这里插入图片描述

3、总结与疑问

总结:已完成了eureka的基本使用、实现了同一eureka注册中心下,各个服务直接的Feign调用
疑问1:eureka中心挂了,那么所有服务都用不了了,相互之间的调用也完了,所以搭建eureka集群,保证注册中心高可用很重要,怎么弄呢? //后续解决了再更新微博
疑问2:各个client注册服务直接 使用 @FeignClient 就能如此轻松的调用,那么底层实现原理是怎么实现的呢? //后续研究明白了,再写文章

猜你喜欢

转载自blog.csdn.net/weixin_43911286/article/details/110293932