• Eureka 集群搭建


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

    互相注册 相互守望

    先要修改本机的hosts文件的主机映射 增加映射 C:WindowsSystem32driversetchosts

    1.修改之前7001配置文件

    server:
      port: 7001
    eureka:
      instance:
        hostname: localhost #服务端的实例名称
      client:
        #false表示不向服务器注册自己
        register-with-eureka: false
        #false表示自己就是注册中心 去维护服务实例 不需要去检索服务
        fetch-register: false
        #设置与Enreka server交互的地址查询服务和注册服务都需要这个地址
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

    2.修改之后 需要修改hostname 这个就是刚刚修改的本机的hosts主机映射 还需要修改服务地址

    server:
      port: 7001
    eureka:
      instance:
        hostname: eureka7001.com #服务端的实例名称 主机别名  修改
      client:
        #false表示不向服务器注册自己
        register-with-eureka: false
        #false表示自己就是注册中心 去维护服务实例 不需要去检索服务
        fetch-register: false
        #设置与Enreka server交互的地址 查询服务和注册服务都需要这个地址  修改
        service-url:
          defaultZone: http://eureka7002.com:7002/eureka/
    

    3.创建另一个注册中心7002 导入依赖不赘述了 7002的application.yml配置

    server:
      port: 7002
    eureka:
      instance:
        hostname: eureka7002.com #服务端的实例名称  主机别名 
      client:
        #false表示不向服务器注册自己
        register-with-eureka: false
        #false表示自己就是注册中心 去维护服务实例 不需要去检索服务
        fetch-register: false
        #设置与Enreka server交互的地址查询服务和注册服务都需要这个地址
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/
    

    4.启动7001 7002 配置成功


    5.修改微服务提供者的配置client 其实只是增加了一个服务请求地址 defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka 集群版

    8888消费者模块

    server:
      port: 8888
    spring:
      application:
        name: cloud-order-service
    
    eureka:
      client:
        register-with-eureka: true #自己注册到eureka 默认true
        #是否从eureka抓取已有的注册信息 默认为true 单节点无所谓 集群必须为true 才能配合ribbon使用负载均衡
        fetch-registry: true
        service-url:
          #defaultZone: http://localhost:7001/eureka  #注册中心地址
          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
    

    支付模块8001

    server:
      port: 8001
    
    spring:
      application:
        name: cloud-payment-service
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
        username: root
        password: 1234
    
    mybatis:
      mapper-locations: classpath:mapper/*.xml  #配置文件
      type-aliases-package: com.lyx.cloud.entities #所有entity别名所在包
    eureka:
      client:
        register-with-eureka: true #自己注册到eureka 默认true
        #是否从eureka抓取已有的注册信息 默认为true 单节点无所谓 集群必须为true 才能配合ribbon使用负载均衡
        fetch-registry: true
        service-url:
         # defaultZone: http://localhost:7001/eureka  #注册中心地址  单机版
         defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
    

    5.启动8888-消费者模块 8001-支付模块服务提供 成功注册


    6.微服务提供者 集群搭建 再创建一个支付模块8002

    server:
      port: 8002
    
    spring:
      application:
        name: cloud-payment-service
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
        username: root
        password: 1234
    
    mybatis:
      mapper-locations: classpath:mapper/*.xml  #配置文件
      type-aliases-package: com.lyx.cloud.entities #所有entity别名所在包
    eureka:
      client:
        register-with-eureka: true #自己注册到eureka 默认true
        #是否从eureka抓取已有的注册信息 默认为true 单节点无所谓 集群必须为true 才能配合ribbon使用负载均衡
        fetch-registry: true
        service-url:
         # defaultZone: http://localhost:7001/eureka  #注册中心地址  单机版
         defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
    

    7.运行所有模块 注册成功


    8.修改单机版的8888消费者的controller 让它不指定从服务端口

    controller

    @RestController
    @Slf4j
    public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    //private static  final  String BASE_URL="http://localhost:8001"; 修改前的端口
    private static  final  String BASE_URL="http://CLOUD-PAYMENT-SERVICE";  修改后 变成在eureka注册的服务实例名称
    
    @PostMapping("/comsumer/payment/create")
    public CommonResult<PayMent> create(@RequestBody PayMent payMent){
        return restTemplate.postForObject(BASE_URL+"/payment/create",payMent,CommonResult.class);
    }
    
    @GetMapping("/comsumer/payment/get/{id}")
    public CommonResult<PayMent> getPaymentByid(@PathVariable("id") Long id){
        return restTemplate.getForObject(BASE_URL+"/payment/get/"+id,CommonResult.class);
    }
    

    }

    9.修改RestTemplate 配置 需要给它添加一个注解@LoadBalanced 赋予RestTemplate负载均衡能力 默认是轮询

    是因为注册中心暴露了多个支付模块的服务名称CLOUD-PAYMENT-SERVICE 但是消费者模块不知道选哪个

    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    

    10.测试 所以消费者模块只关注微服务名称


  • 相关阅读:
    JZOJ 4043. 【雅礼集训2015Kzf】洪水
    JZOJ 5451.Genocide
    P4719 【模板】"动态 DP"&动态树分治
    [NOIP2018 提高组] 保卫王国
    【NOIP2017提高组正式赛】列队
    vuex的总结
    height:100vh
    从URL输入到页面展现到底发生什么
    JS的空数组是true还是false(内附JS类型转换表)
    Vue拼图验证组件使用教程
  • 原文地址:https://www.cnblogs.com/lyx666/p/12749077.html
Copyright © 2020-2023  润新知