zoukankan      html  css  js  c++  java
  • Eruake集群搭建(实现代码)

    搭建注册中心集群 以防出现单点故障 也就是唯一那个注册中心出现故障 导致整个架构故障

    此次实现时伪集群,单台计算机搭建,所以需要修改host文件进行模拟

    C:WindowsSystem32driversetchosts 修改映射文件

    127.0.0.1  eureka1
    127.0.0.1  eureka2

    eureka1配置 (这里使用一个项目搭建,使用idea复制启动类,读取不同的配置文件即可)

    application-server1.yml

    spring:
      application:
        name: eureka
    server:
      port: 8761
    eureka:
      client:
        service-url:
          #注册中心地址
          defaultZone: http://eureka2:8762/eureka
      instance:
        hostname: eureka1

    eureka2配置 

    application-server2.yml

    spring:
      application:
        name: eureka
    server:
      port: 8762
    eureka:
      client:
        service-url:
          #注册中心地址 互相注册,将1注册到2,2注册到1
          defaultZone: http://eureka1:8761/eureka
      instance:
        hostname: eureka2

    注意:

      1.配置文件中的 hostname 属性与注册的主机地址相同。

      2.集群中不能有以下配置,否则集群中的eruake服务无法互相发现,互相拉去服务,也无法监听到,并且提示无法使用,但是这种情况下服务还能够正常运行,所以很多人忽略此问题。

    #false表示不向服务器注册自己
    register-with-eureka: false
    #false表示自己就是注册中心 去维护服务实例 不需要去检索服务
    fetch-register: false

    此时我们分配启动查看。

     我们发现集群中的服务已经互相注册,然后我们查看这里

     unavailable代表不能使用的,available代表正常的。如果配置了不拉去不发现自身服务则会出现问题。

    此时简单的集群搭建完成,下面我们来注册两个服务提供和一个调用调用。

    用户服务

    8001端口用户服务(为了隐藏数据库连接使用了config配置中心配置到git中,重点是eruake配置)

    spring:
      application:
        name: user-server
      #被提取到gitee中了
      cloud:
        config:
          discovery:
            #开启使用config配置中心
            enabled: true
            #配置中心服务应用名称
            service-id: config-server
          #git分支名称
          label: master
          #git文件名称
          name: user
          #git文件环境
          profile: test
    #mybatis别名
    #被提取到gitee中了
    
    #配置eureka客户端
    eureka:
      client:
        service-url:
          defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka
      instance:
        prefer-ip-address: true
    server:
      port: 8001
    management:
      endpoints:
        web:
          exposure:
            #此处刷新地址必须叫refresh
            include: refresh

    8002端口用户服务

    使用idea的功能复制一个相同的启动类然后指定端口即可,模仿创建了集群。

     重要的是  defaultZone 属性 需要同时向两个服务中注册。或者向其中一个服务中注册 ,因为eruake是相互监听拉取的。

    现在启动两个服务提供者查看

    服务成功注册到eruake中。

    下面注入一个调用者

    调用者/消费者

    server:
      port: 8081
    spring:
      application:
        name: consumer-service
    
    #配置eureka客户端
    eureka:
      client:
        service-url:
          defaultZone: http://eureka1:8761/eureka,http://eureka2:8762/eureka
      instance:
        prefer-ip-address: true

    启动

     注册成功,这里我们为了演示方便不使用Fegin负载均衡调用消费者,直接使用 RestTemplate 搭配  ribbon

    @Bean
    @LoadBalanced //使用ribbon
    public RestTemplate restTemplate() {
       RestTemplate restTemplate = new RestTemplate();
       return restTemplate;
    }
    @RestController
    public class UserController {
    
        @Autowired
        RestTemplate restTemplate;
    
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @RequestMapping("users/{id}")
        public R users(@PathVariable Integer id) {
            //根据服务应用名称从注册列表获取服务实例
            String strUrl = "http://user-server/users/" + id;
            R forObject = restTemplate.getForObject(strUrl, R.class);
            return forObject;
        }
    }

    直接访问8081消费者接口

     

     我们发现其中的port字段会随之变化,者是ribbon按照一定的策略进行了负载均衡

  • 相关阅读:
    Day4
    Day 4 -E
    Day4
    Day4
    Day4
    Day4
    Day4-F-产生冠军 HDU
    Day4
    Day4-B-最短路径问题 HDU3790
    HackerRank
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13869490.html
Copyright © 2011-2022 走看看