当前位置:   article > 正文

SpringCloud(二)-手把手教你搭建Eureka Server和Eureka Client_springcloud(二)手把手教你搭建eureka server和eureka client

springcloud(二)手把手教你搭建eureka server和eureka client

SpringCloud(二)-手把手教你搭建Eureka Server和Eureka Client

 

转载自:Renaissance_

https://www.jianshu.com/p/cc61898291e3

 

实际项目中,一个系统由众多微服务组成。微服务之间的联系和调用关系该由谁来组织和协调呢,Spring Cloud提供了Eureka这个解决方案。因此这篇文章我们将继续上一篇文章的讲解,笔者将通过搭建的方式讲述如何通过Eureka实现服务的注册与发现。

系列文章
SpringCloud(一)-手把手教你创建springcloud微服务父子项目
SpringCloud(二)-手把手教你搭建Eureka Server和Eureka Client
SpringCloud(三)-手把手教你通过Rinbbon实现客户端负载均衡
SpringCloud(四)-手把手教你使用OpenFeign
SpringCloud(五)-手把手教你使用Hystrix配置服务熔断和降级以及Hystrix Dashboard
SpringCloud(六)-手把手教你搭建SpringCloud Config配置中心
SpringCloud(七)-手把手教你使用消息总线Bus实现动态刷新
SpringCloud(八)-手把手教你使用Stream消息驱动

Eureka介绍

Eureka 是C/S架构,这意味着我们Eureka是由server端和client端组成。在我们的项目中,商品服务的提供者和消费者都是服务客户端,我们都需要将服务注册到Eureka Server端,因此我们需要构建一个新的子项目springcloud-eureka-server-8300作为Eureka Server。

1. 搭建Eureka Server

1.1 新建springcloud-eureka-server-8300 子模块

右键父项目

输入项目名

输入项目名

1.1 pom.xml引入相关jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloudtest</artifactId>
  7. <groupId>com.elio.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>springcloud-eureka-server-8300</artifactId>
  12. <dependencies>
  13. <!--eureka-server -->
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  17. </dependency>
  18. <!--spring boot -->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <!--热部署-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-devtools</artifactId>
  27. </dependency>
  28. </dependencies>
  29. </project>

1.2 新增application.yml配置

  1. server:
  2. port: 8300
  3. spring:
  4. application:
  5. name: springcloud-eureka-server
  6. eureka:
  7. instance:
  8. hostname: localhost
  9. client:
  10. register-with-eureka: false
  11. fetch-registry: false
  12. service-url:
  13. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

1.3 新增主启动类EurekaServer8300.java

关键是添加@EnableEurekaServer注解

  1. package com.elio.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer
  7. public class EurekaServer8300 {
  8. public static void main(String[] args){
  9. SpringApplication.run(EurekaServer8300.class, args);
  10. }
  11. }

1.4 测试

至此我们已经搭建完Eureka Server项目了,接下来就是启动Eureka Server来启动测试了

启动成功

浏览器输入 http://localhost:8300/,我们发现应用实例那块为空,是因为我们还没有开始配置Eureka client端。

成功显示

2. 搭建Eureka Client

Eureka Client 就是我们上篇文章中新增的商品服务提供者 springcloud-product-provider-8100和 商品服务消费者springcloud-product-consumer-8200,我们要做的就是三步,引入jar包,添加注解,修改配置即可。

2.1 pom.xml引入jar包

  1. <!--eureka-client -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>

2.2 application.yml添加Eureka相关配置

  1. eureka:
  2. instance:
  3. instance-id: ${spring.application.name}
  4. client:
  5. fetch-registry: true
  6. register-with-eureka: true
  7. service-url:
  8. defaultZone: http://localhost:8300/eureka/ #Eureka地址

2.3 主启动类加上@EnableDiscoveryClient注解

  1. package com.elio.springcloud;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  6. @SpringBootApplication
  7. @MapperScan("com.elio.springcloud.dao")
  8. @EnableDiscoveryClient
  9. public class ProductProvider8100 {
  10. public static void main(String[] args){
  11. SpringApplication.run(ProductProvider8100.class, args);
  12. }
  13. }

2.4

两个项目的步都是以上三步,操作完后,我们接下来可以启动8100和8200两个项目了。然后浏览器中刷新Eureka服务地址

启动8100项目

启动8200项目

消费者和服务者已经成功注册成功

3. 搭建集群Eureka Server

上两步中我们已经成功搭建了Eureka Server 和Eureka Client单机版本,但是在实际的生产中,微服务的部署都是通过集群的方式,一个微服务可能部署在多台服务器上,一个Eureka Server也必须集群部署,因为当一个Eureka Server节点挂掉后,其它的Eureka Server还可以继续提供服务发现的功能,接下来就一步步搭建Eureka Server集群。在本例中,我们将新建一个Eureka Server 8301项目,新建一个Eureka Client 8201项目。

3.1 新增Eureka Server 8301项目

3.1.1 新增springcloud-eureka-server-8301

右键-new

输入项目名

选择路径

3.1.2 pom.xml引入jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloudtest</artifactId>
  7. <groupId>com.elio.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>springcloud-eureka-server-8301</artifactId>
  12. <dependencies>
  13. <!--eureka-server -->
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  17. </dependency>
  18. <!--spring boot -->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <!--热部署-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-devtools</artifactId>
  27. </dependency>
  28. </dependencies>
  29. </project>

3.1.3 新增application.yml配置文件

  1. server:
  2. port: 8301
  3. spring:
  4. application:
  5. name: springcloud-eureka-server-8301
  6. eureka:
  7. instance:
  8. hostname: localhost
  9. client:
  10. register-with-eureka: true
  11. fetch-registry: true
  12. service-url:
  13. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/,http://localhost:8300/eureka/

3.1.4 新增主启动类EurekaServer8301

  1. package com.elio.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer
  7. public class EurekaServer8301 {
  8. public static void main(String[] args){
  9. SpringApplication.run(EurekaServer8301.class, args);
  10. }
  11. }

3.1.5 测试

至此我们已经成功搭建了第二个Eureka Server服务项目,接下来就是启动这个8301项目了

 

启动成功

修改Eureka Server 8300 和Eureka Client 8100 和8200配置

上面我们已经成功搭建了Eureka Server 8301项目,接下来需要修改配置将8300,8100,8200都注册到8301上,接下来就是直接修改这三个项目的Eureka配置即可

3.1.6 修改服务提供者和消费者配置

8300 application.yml

  1. server:
  2. port: 8300
  3. spring:
  4. application:
  5. name: springcloud-eureka-server-8300
  6. eureka:
  7. instance:
  8. hostname: localhost
  9. client:
  10. register-with-eureka: true
  11. fetch-registry: true
  12. service-url:
  13. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/,http://localhost:8301/eureka/

8100 application.yml

  1. server:
  2. port: 8100 #端口号
  3. spring:
  4. application:
  5. name: springcloud-product-provider-8100
  6. datasource:
  7. url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&userSSL=false
  8. driverClassName: com.mysql.jdbc.Driver
  9. username: root
  10. password: 111111
  11. mybatis:
  12. mapper-locations: classpath:mapping/*mapper.xml # Mybatis 映射文件位置
  13. type-aliases-package: com.elio.springcloud.entity # 表对应的实体类包
  14. eureka:
  15. instance:
  16. instance-id: ${spring.application.name}
  17. client:
  18. fetch-registry: true
  19. register-with-eureka: true
  20. service-url:
  21. defaultZone: http://localhost:8300/eureka/,http://localhost:8301/eureka/

8200 application.yml

  1. server:
  2. port: 8200
  3. spring:
  4. application:
  5. name: springcloud-product-consumer-8200
  6. eureka:
  7. instance:
  8. instance-id: ${spring.application.name}
  9. client:
  10. fetch-registry: true
  11. register-with-eureka: true
  12. service-url:
  13. defaultZone: http://localhost:8300/eureka/,http://localhost:8301/eureka/

3.1.7 集群测试

接下来就是依次启动8300,8301,8100,8200项目了,四个项目启动成功后,打开8300和8301的界面,发现8100和8200成功注册到两个Eureka Server上面了

8300 Eureka server

8301 Eureka Server

4. 搭建集群Eureka Client

在上一步中,我们成功创建了Eureka Server集群,但是还没有测试微服务提供者和消费者的集群,在此仅以消费者集群为例,创建Eureka Client 集群。我们接下来新增一个8201消费者,创建步骤和8200的步骤一模一样,只是名字不一样而已,在此笔者不赘述了,直接贴出关键代码即可。

4.1 pom.xml引入jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloudtest</artifactId>
  7. <groupId>com.elio.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>springcloud-product-consumer-8201</artifactId>
  12. <dependencies>
  13. <!--eureka-client -->
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  17. </dependency>
  18. <!--spring boot -->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <!--热部署-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-devtools</artifactId>
  27. </dependency>
  28. <!--lombok-->
  29. <dependency>
  30. <groupId>org.projectlombok</groupId>
  31. <artifactId>lombok</artifactId>
  32. </dependency>
  33. </dependencies>
  34. <!--热启动插件-->
  35. <build>
  36. <plugins>
  37. <plugin>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-maven-plugin</artifactId>
  40. <configuration>
  41. <fork>true</fork>
  42. <addResources>true</addResources>
  43. </configuration>
  44. </plugin>
  45. </plugins>
  46. </build>
  47. </project>

4.2 新增application.yml配置

  1. server:
  2. port: 8201
  3. spring:
  4. application:
  5. name: springcloud-product-consumer-8201
  6. eureka:
  7. instance:
  8. instance-id: ${spring.application.name}
  9. client:
  10. fetch-registry: true
  11. register-with-eureka: true
  12. service-url:
  13. defaultZone: http://localhost:8300/eureka/,http://localhost:8301/eureka/

4.3 新增主ProductConsumer8201 启动类

  1. package com.elio.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  5. import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  7. @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
  8. @EnableDiscoveryClient
  9. public class ProductConsumer8201 {
  10. public static void main(String[] args){
  11. SpringApplication.run(ProductConsumer8201.class, args);
  12. }
  13. }

4.4 测试

启动成功后,可看下图已经成功注册到两个服务器上面了,至此Eureka Server和Eureka Client 我们已经成功搭建起了单机版本和集群版本。

启动成功界面

8201成功注册到8300上面

8201成功注册到8301上面

5. 搭建公共项目

还记得上一篇文章中我们抛出的两个问题么。第一个问题,服务之间注册我们已经实现了。第二个问题就是服务之间的公共类比如Result类都被引用了,当这个Result类被修改了后,我们将要修改多个微服务项目,这显然是不明智的,因此我们需要一个公共模块,来构建公共的api。

5.1 新增公共模块

新增公共模块和以上子模块都一样,在此只贴出重要代码和配置即可

5.2 pom.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloudtest</artifactId>
  7. <groupId>com.elio.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>springcloud-common-api</artifactId>
  12. <dependencies>
  13. <!--spring boot -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-web</artifactId>
  17. </dependency>
  18. <!--热部署-->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-devtools</artifactId>
  22. </dependency>
  23. <!--lombok-->
  24. <dependency>
  25. <groupId>org.projectlombok</groupId>
  26. <artifactId>lombok</artifactId>
  27. </dependency>
  28. </dependencies>
  29. <!--热启动插件-->
  30. <build>
  31. <plugins>
  32. <plugin>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-maven-plugin</artifactId>
  35. <configuration>
  36. <fork>true</fork>
  37. <addResources>true</addResources>
  38. </configuration>
  39. </plugin>
  40. </plugins>
  41. </build>
  42. </project>

5.3 新增Result类

  1. package com.elio.springcloud.dto;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Getter;
  4. import lombok.NoArgsConstructor;
  5. import lombok.Setter;
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. @Setter
  9. @Getter
  10. public class Result {
  11. private int code;
  12. private String message;
  13. private Object result;
  14. }

5.4 消费者和提供者引入jar包

由于只是公共实体类模块,在此不用新增配置和启动类,接下来就是修改消费者8200和提供者8100的pom.xml引入以下配置即可

  1. <!--commom-api -->
  2. <dependency>
  3. <groupId>com.elio.springcloud</groupId>
  4. <artifactId>springcloud-common-api</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. </dependency>

引入成功后,删除8200和8100中的dto文件夹

删除dto文件夹

5.5 测试

重新启动8200和8100项目,然后浏览器测试下

8200测试通过

8100测试通过

总结

这篇文章我们成功地配置了Eureka Server端和Eureka Client端,并分别搭建了单机版本和集群版本。通过搭建步骤,我们了解Eureka的基本使用,具体的原理本文没有涉及,将会再写一篇文章来解析了。
现在项目存在的问题就是在服务消费者中,服务提供者地址我们还是写死了。第二个问题就是假如服务提供者集群部署,服务消费者应该去访问哪个提供者,这两个问题我们接下来将在下一篇文章介绍。

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

闽ICP备14008679号