当前位置:   article > 正文

【Spring Cloud】二、注册中心Eureka的使用、与Nacos的对比_eureka用的多吗

eureka用的多吗

目录

一、Eureka原理

二、应用

1. 添加相关依赖

2. 入口类

3. 全局配置文件

4. 结果

5. 一般eureka集群会配置三个或三个以上

6. 设置服务提供者Client

(1)pom

 (2)全局配置文件

(3)入口类 

(4)编写服务 

7. 启动后就多了个服务

8. 加个服务消费者

(1)pom

(2)全局配置文件 

(3)入口类 

(4)创建Feign接口 

(5)控制器类注入Feign接口

9. 调用

三、与Nacos对比


Eureka是Netflix开源的一款提供服务注册和发现的产品,是Spring Cloud中最核心的组件之一。

如果没有注册中心(即服务中心),多个项目之间的调用就会出现混乱。

一、Eureka原理

二、应用

1. 添加相关依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>eureka</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>eureka</name>
  9. <description>Demo project for Spring Boot</description>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>2.1.4.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <!-- 引入的Eureka-server -->
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  26. <version>2.0.1.RELEASE</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-autoconfigure</artifactId>
  36. </dependency>
  37. </dependencies>
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

这里注意Spring Boot版本,如果2.4.1可能会报错找不到某些类,降低版本即可。

2. 入口类

添加@EnableEurekaServer注解

  1. @SpringBootApplication
  2. @EnableEurekaServer
  3. public class EurekaApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(EurekaApplication.class, args);
  6. }
  7. }

3. 全局配置文件

  1. spring:
  2. application:
  3. name: spring-cloud-eureka
  4. server:
  5. port: 8888
  6. eureka:
  7. client:
  8. register-with-eureka: false
  9. fetch-registry: false
  10. serviceUrl:
  11. defaultZone: http://localhost:${server.port}/eureka/
  • eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true。
  • eureka.client.fetch-registry :表示是否从Eureka Server获取注册信息,默认为true。
  • eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。

4. 结果

5. 一般eureka集群会配置三个或三个以上

这时只需每个eureka的serviceUrl.defaultZone指向其它的eureka节点地址即可。比如

defaultZone: http://test1:8888/eureka/,http://test2:8888/eureka/

6. 设置服务提供者Client

(1)pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>provider</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>provider</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <!-- 引入的Eureka-server -->
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  26. <version>2.0.1.RELEASE</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-autoconfigure</artifactId>
  36. </dependency>
  37. </dependencies>
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

 (2)全局配置文件

  1. eureka:
  2. client:
  3. serviceUrl: #注册中心的注册地址
  4. defaultZone: http://localhost:8888/eureka/
  5. server:
  6. port: 8082 #服务端口号
  7. spring:
  8. application:
  9. name: service-provider #服务名称--调用的时候根据名称来调用该服务的方法

(3)入口类 

加上注解@EnableEurekaClient

@EnableDiscoveryClient@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到该服务。不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。)

  1. @SpringBootApplication
  2. @EnableEurekaClient
  3. public class ProviderApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ProviderApplication.class, args);
  6. }
  7. }

(4)编写服务 

  1. /**
  2. * 功能说明
  3. *
  4. * @author winrh
  5. * @version 1.0.0
  6. * @date 2021/1/12
  7. */
  8. @RestController
  9. public class MyController {
  10. /**
  11. * 假如这个客户端要提供一个hello的方法
  12. * @return
  13. */
  14. @GetMapping(value = "/hello")
  15. @ResponseBody
  16. public String hello(@RequestParam String name){
  17. return "Hello, " + name;
  18. }
  19. }

7. 启动后就多了个服务

自测一下没问题: 

8. 加个服务消费者

(1)pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>consumer</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>consumer</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.cloud</groupId>
  26. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  27. <version>2.0.1.RELEASE</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.cloud</groupId>
  36. <artifactId>spring-cloud-starter-feign</artifactId>
  37. <version>1.4.6.RELEASE</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework.cloud</groupId>
  41. <artifactId>spring-cloud-openfeign-core</artifactId>
  42. <version>2.2.5.RELEASE</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>io.github.openfeign</groupId>
  46. <artifactId>feign-jackson</artifactId>
  47. <version>10.9</version>
  48. </dependency>
  49. </dependencies>
  50. <build>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. </plugin>
  56. </plugins>
  57. </build>
  58. </project>

(2)全局配置文件 

  1. eureka:
  2. client:
  3. serviceUrl: #注册中心的注册地址
  4. defaultZone: http://localhost:8888/eureka/
  5. server:
  6. port: 8083 #服务端口号
  7. spring:
  8. application:
  9. name: service-consumer #服务名称--调用的时候根据名称来调用该服务的方法

(3)入口类 

入口类加注解@EnableDiscoveryClient@EnableFeignClients(Feign实际可以用dubbo取代,这里练一练)

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. @EnableFeignClients
  4. public class ConsumerApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ConsumerApplication.class, args);
  7. }
  8. }

(4)创建Feign接口 

用FeignClient调用,需要定义接口。其中,service-provider对应的是注册中心中的服务名,也就是服务提供者全局配置文件写的Spring.application.name。

  1. /**
  2. * feign接口
  3. * example-provider为远程服务名
  4. *
  5. * @author winrh
  6. * @version 1.0.0
  7. * @date 2021/1/12
  8. */
  9. @FeignClient(name = "service-provider")
  10. public interface MyFeign {
  11. @GetMapping("/hello")
  12. String hello(@RequestParam(value = "name") String name);
  13. }

(5)控制器类注入Feign接口

  1. /**
  2. * 功能说明
  3. *
  4. * @author winrh
  5. * @version 1.0.0
  6. * @date 2021/1/12
  7. */
  8. @RestController
  9. public class MyController {
  10. @Autowired
  11. private MyFeign myFeign;
  12. @GetMapping("/hello")
  13. public String hello(String name) {
  14. return myFeign.hello(name);
  15. }
  16. }

 

看看效果:

9. 调用

三、与Nacos对比

表格来源:https://www.jianshu.com/p/afd7776a64c6

对比项目\注册中心Spring Cloud NacosSpring Cloud Eureka
客户端更新服务信息使用注册+DNS-f+健康检查模式。 DNS-F客户端使用监听模式push/pull拉取更新信息客户端定时轮询服务端获取其他服务ip信息并对比,相比之下服务端压力较大、延迟较大
伸缩性使用Raft选举算法性能、可用性、容错性均比较好,新加入节点无需与所有节点互相广播同步信息由于使用广播同步信息,集群超过1000台机器后对eureka集群压力很大
健康检查模式/方式支持服务端/客户端/关闭检查模式,检查方式有tcp、http、sql。支持自己构建健康检查器客户端向服务端发送http心跳
负载均衡支持支持
手动上下线服务方式通过控制台页面和API通过调用API
跨中心同步支持不支持
k8s集成支持不支持
分组Nacos可用根据业务和环境进行分组管理不支持
权重Nacos默认提供权重设置功能,调整承载流量压力不支持
厂商阿里巴巴Netflix

 Eureka开源工作已停止,后续不再有更新和维护,而Nacos在以后的版本会支持Spring Cloud+K8s的组合。并且Nacos也是配置中心,这简化了部署维护。

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/978627
推荐阅读
相关标签
  

闽ICP备14008679号