关于spring cloud注册中心多环境多开发人员隔离的问题

2019-02-18  本文已影响15人  Java分布式架构实战

注册中心多环境隔离

注册中心本地开发环境中,开发人员之间也需要隔离

开发人员之间如何隔离呢?命名为类似这种名字product-api-dev-zhangsan?这种方法行不通。因为我们是通过@FeignClient的方式来实现的,为了代码重用,我们会将dto和api定义到一个单独的模块,并将构件发布到maven私服中。如果在本地开发阶段,我们使用到的接口是类似这种@FeignClient("product-api"), 所以这样就会调用QA的服务。

对于开发人员来说,自己负责的模块就调用自己的,其他同事负责的就调用已发布到QA环境的,这样看来会顺畅很多,方便很多。

解决方案:@FeignClient支持属性占位符

官方文档原文:Placeholders are supported in the name and url attributes.

@FeignClient(name = "${feign.name}", url = "${feign.url}")
public interface StoreClient {
    //..
}

基于这一点,我们可以在不同的微服务中定义不同的命名空间,比如在一个有四个模块的项目中我们可以定义如下:

  1. xx.api.basis.namespace=james.h.fu
  2. xx.api.item.namespace=james.h.fu
  3. xx.api.order.namespace=james.h.fu
  4. xx.api.finance.namespace=james.h.fu

然后参考以下两步来解决这个问题。

1. 服务生产者

  1. application-dev.properties中增加namespace
###模块服务命名空间定义###
xxx.basis.namespace =
xxx.item.namespace =
xxx.order.namespace = dev-
xxx.account.namespace =
###模块服务命名空间定义###
spring.application.name = ${xxx.order.namespace}xxx-order-api
  1. feign contract中增加namespace
/**
 * 采购商退货服务契约
 *
 * @author : jamesfu
 * @date : 2/2/2019
 * @time : 4:30 PM
 */
@FeignClient("${xxx.order.namespace:}xxx-order-api")
@RequestMapping("v1/purchaser/tradeReturn")

2. 服务消费者

  1. 在本地开发需要调用自己本机的服务时增加启动参数
    --xxx.order.namespace=james.h.fu
    --xxx.basis.namespace=james.h.fu, 不增加启动参数默认调用QA的服务。

注意:在QA环境的application-qa.properties中将本模块的命名空间设置为空。

###模块服务命名空间定义###
xxx.basis.namespace =
xxx.item.namespace =
xxx.order.namespace = 
xxx.account.namespace =
###模块服务命名空间定义###

Spring Cloud版本说明

项目架构图

Spring Cloud 项目架构图

关注公众号交流学习

关注Java分布式架构实战, 持续精进 联系我,学习交流
上一篇 下一篇

猜你喜欢

热点阅读