Eureka 集群搭建

2020-04-22 16:02:16来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Eureka 集群搭建

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

互相注册 相互守望

先要修改本机的hosts文件的主机映射 增加映射 C:\Windows\System32\drivers\etc\hosts

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.测试 所以消费者模块只关注微服务名称



原文链接:https://www.cnblogs.com/lyx666/p/12749077.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JAVA 必须掌握技能(三)-Java 基础知识

下一篇:在Java中操作Zookeeper