4.Spring-Cloud-Eureka构建双节点服务注册中心集群

Bertha 。 2022-05-29 03:16 263阅读 0赞
  1. 注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。

Eureka Server的设计一开始就考虑了高可用问题,在Eureka的服务治理设计中,所有的结点即是服务的提供方,也是消费方,服务注册中心也不列外之前设计的让注册中心不注册自己。如下配置

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

  1. Eureka Server的高可用实际就是将自己作为服务向其他服务注册中心注册自己,这样就形成了一组互相注册的注册中心,以实现服务清单的相互同步

新建项目:

1.pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>1.spring-cloud-eureka-server</groupId>
  5. <artifactId>spring-cloud</artifactId>
  6. <packaging>jar</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>spring-cloud-eureka-server-double-node</name>
  9. <url>http://maven.apache.org</url>
  10. <!--springboot采用1.5.x 对应springcloud版本为 Dalston -->
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.5.2.RELEASE</version>
  15. <relativePath />
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
  22. </properties>
  23. <dependencies>
  24. <dependency>
  25. <groupId>org.springframework.cloud</groupId>
  26. <artifactId>spring-cloud-starter</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.cloud</groupId>
  30. <artifactId>spring-cloud-starter-eureka-server</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37. </dependencies>
  38. <dependencyManagement>
  39. <dependencies>
  40. <dependency>
  41. <groupId>org.springframework.cloud</groupId>
  42. <artifactId>spring-cloud-dependencies</artifactId>
  43. <version>${spring-cloud.version}</version>
  44. <type>pom</type>
  45. <scope>import</scope>
  46. </dependency>
  47. </dependencies>
  48. </dependencyManagement>
  49. <build>
  50. <plugins>
  51. <plugin>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-maven-plugin</artifactId>
  54. </plugin>
  55. </plugins>
  56. </build>
  57. </project>

2.、创建application-testhost.properties,作为testhost服务中心的配置,并将serviceUrl指向testhost2

  1. spring.application.name=eureka-server
  2. server.port=8000
  3. #C盘 -> Windows -> System32 -> drives -> etc -> hosts文件
  4. #配置主机
  5. eureka.instance.hostname=testhost
  6. eureka.client.serviceUrl.defaultZone=http://testhost2:8001/eureka/

3.、创建application-testhost2.properties,作为testhost2服务中心的配置,并将serviceUrl指向testhost1

  1. spring.application.name=eureka-server
  2. server.port=8001
  3. #C盘 -> Windows -> System32 -> drives -> etc -> hosts文件
  4. #配置主机
  5. eureka.instance.hostname=testhost2
  6. eureka.client.serviceUrl.defaultZone=http://testhost:8000/eureka/

4.主机名的配置注释中已经写明了。

  1. 127.0.0.1 testhost
  2. 127.0.0.1 testhost2

5.启动类

  1. package com.niugang;
  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 SpringCloudEurekaApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(SpringCloudEurekaApplication.class, args);
  10. }
  11. }

6.打成jar包

1.先查看pom.xml中 jar是为jar

2.在eclipse中右键项目—>Run as —->Run configurations中main的tab栏中的goals填写package这样就打成jar包了如果失败,右键项目—>maven—>update project然后在重新打包.

7.运行

一次执行以下命令,如果执行中报错参考http://blog.csdn.net/niugang0920/article/details/79573134

java -jar spring-cloud-0.0.1-SNAPSHOT.jar —spring.profiles.active=testhost

format_png

没有启动第二条命令,效果如上图

java -jar spring-cloud-0.0.1-SNAPSHOT.jar —spring.profiles.active=testhost2

format_png 1

启动第二条命令,刷新浏览器结果为上图。

8.修改服务提供方配置文件,将注册中心改成配置的testhost,testhost2

  1. #指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问
  2. spring.application.name=eureka-client
  3. server.port=8081
  4. eureka.instance.hostname=testhost
  5. #注册中心地址
  6. eureka.client.serviceUrl.defaultZone=http://testhost:8000/eureka/,http://testhost2:8001/eureka/

启动服务提供方。

刷新:http://testhost:8000/ 可知服务提供方已经注册到testhost中了

format_png 2

刷新:http://testhost2:8001/ 可知服务提供方已经注册到testhost2中了

format_png 3此时断开testhost2,注册在testhost上的eureka-client服务还行访问,这样就实现了注册中心的高可用了。

如果不想使用主机名来定义注册中心的地址,也可以使用ip地址的形式,需要配置文件中增加
eureka.instance.prefer-ip-address=true

微信公众号

  1. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25pdWdhbmcwOTIw_size_16_color_FFFFFF_t_70][]

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读