spingcloud 实现注册中心集群配置

比眉伴天荒 2022-05-22 11:06 279阅读 0赞

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

综上所述,在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。

这篇文章给出了一个 Eureka Server 双节点集群的例子,以及一个N节点的例子。并且最后部署实践效果。

首先这里先截图双节点的的实现。博主我这里没有现成的服务器,所以就在本机测试了,只是弄了几个不同的端口,ip就默认locahost了

首先创建2个Eureka 注册中心,Eureka_A1,

Eureka_A2

两个注册中心的启动类都一样,maven数据仓库我这里就不截图了,网上一大堆

  1. //标明当前是 注册中
  2. @EnableEurekaServer
  3. // 标明是springboot项目
  4. @SpringBootApplication
  5. public class NewMviewEureKaServcerApplication {
  6. public static void main(String[] args) {
  7. System.err.println("NewMviewEureKaServcerApplication Service Strat Success!");
  8. SpringApplication.run(NewMviewEureKaServcerApplication.class, args);
  9. }
  10. }
  11. A1 配置文件端口9110 A2 配置文件端口9111 A1里面注册A2 A2里面注册A1

然后是Eureka_A1的 properties文件

  1. server.port=9110
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. spring.application.name=eureka-server
  5. eureka.client.serviceUrl.defaultZone=http://localhost:9111/eureka/

然后是Eureka_A2的 properties文件

  1. server.port=9111
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. spring.application.name=eureka-server
  5. eureka.client.serviceUrl.defaultZone=http://localhost:9110/eureka/

上诉就是实现了2个注册中心互相注册,然后分别启动A1,A2的main,效果图如下

70

70 1

然后接着启动一个测试的服务,代码我这里就不截图了 直接上 注册中的截图

70 270 3

下面继续搭建N个注册中心的集群 这里就拿3个做实验了

在上面 A1,A2,的基础上改造 以及加一个A3

A1配置文件如下,主要就是实现了 A1往A2,A3里面注册,

  1. server.port=9110
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. spring.application.name=eureka-server
  5. eureka.client.serviceUrl.defaultZone=http://localhost:9111/eureka/,http://localhost:9112/eureka/

A2配置文件如下,主要就是实现了 A2往A3,A1里面注册,

  1. server.port=9111
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. spring.application.name=eureka-server
  5. eureka.client.serviceUrl.defaultZone=http://localhost:9112/eureka/,http://localhost:9110/eureka/

A3配置文件如下,主要就是实现了 A3往A2,A1里面注册,

  1. server.port=9112
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. spring.application.name=eureka-server
  5. eureka.client.serviceUrl.defaultZone=http://localhost:9111/eureka/,http://localhost:9110/eureka/

然后分别启动A1,2,3启动类一模一样跟上面 就不截图了,直接上效果图

70 4

其他的2个端口的就不截图了 我这里是OK 的 ,下面写一个简单服务 都往这3个注册中心里注册,直接上配置文件了

Java代码 大同小异 就不截图了

S1 服务提供properties,我的配置文件里面 是处理了

  1. hystrix 容错的 你们可直接忽视最下面4行。我这里就不删除了,然后截图一下效果
  2. #euerka
  3. spring.application.name=new-mview-http
  4. #port set
  5. server.port=10016
  6. eureka.client.service-url.defaultZone=http://localhost:9110/eureka/,http://localhost:9111/eureka/,http://localhost:9112/eureka/
  7. #feign\u5F00\u542F\u65AD\u8DEF\u7531
  8. feign.hystrix.enabled=true
  9. #\u56E0\u4E3A\u5386\u53F2\u6570\u636E\u8F83\u591A\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u957F\u4E00\u70B9
  10. hystrix.command.default.execution.timeout.enabled: false

效果如下:

70 5

接下来简单的在控制层 访问一下 看能不能正常访问,我控制是调用的服务。服务那边我就不上图了 只是简单的return一下

TestConterllor.java

  1. @Controller
  2. public class TestConterllor {
  3. @Autowired
  4. private RestTemplate restTemplate;
  5. @Autowired
  6. TestFignReasService testFignReasService;
  7. //ribbon的方式
  8. @RequestMapping(value = "/testsucc")
  9. public @ResponseBody String testResutl() {
  10. System.err.println("http test success");
  11. // getForObject("http://springboot-h2/user/" + 1, User.class);
  12. String u = this.restTemplate.getForObject("http://new-mview-server/testRonm/" + 1, String.class);
  13. System.out.println(u);
  14. return u;
  15. }
  16. //feign的方式
  17. @RequestMapping(value = "/testsuccss")
  18. public @ResponseBody String testResutlss() {
  19. System.err.println("http test fign success");
  20. String u = testFignReasService.returnReasData(1);
  21. System.out.println(u);
  22. return u;
  23. }
  24. }

然后是 url访问 效果图

70 6

你们可以试着 关闭 A1,A2,A3其中的一个或2个 他还是可以正常使用的 我这里不截图了

发表评论

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

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

相关阅读