分布式Dubbo和spring cloud在多服务多人开发环境下的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26566331/article/details/86523390

在大型的dubbo多服务开发环境下,统一的注册注册中心。怎么测试自己的服务呢?

问题:1.直接启动注册,相同环境下服务直接注册可能会被其他同事所调用。相当于提供多个provider,使用loadbalance策略。

           2.本地consumer无法访问到自己已修改provider。

 

解决:很简单!

          1.服务不用注册到Zookeeper注册中心。

          2.本地consumer点对点直连该服务。

 

本机提供者服务不想Zookeeper注册服务(这样做使得他人条用不了自己的本机服务,因为服务还不稳定)

<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" register="false" file="d://1.text" />

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A接口配置点对点,不影响B接口从注册中心获取列表。

  • 如果是线上需求需要点对点,可在<dubbo:reference>中配置url指向提供者,将绕过注册中心,多个地址用分号隔开,配置如下:(1.0.6及以上版本支持)

<dubbo:reference interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />

  • 在JVM启动参数中加入-D参数映射服务地址,如:(key为服务名,value为服务提供者url,此配置优先级更高,1.0.15及以上版本支持)

java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890

        注意:为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用。

  • 如果服务比较多,也可以用文件映射,如:(用-Ddubbo.resolve.file指定映射文件路径,此配置优先级高于<dubbo:reference>中的配置,1.0.15及以上版本支持)(2.0以上版本自动加载$(user.home)/dubbo-resolve.properties文件,不需要配置)

java Ddubbo.resolve.file=xxx.properties

        然后再映射文件xxx.properties中加入:(key为服务名,value为服务提供者url)

com.alibaba.xxx.XxxService=dubbo://localhost:20890

        注意:为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用。

 

spring cloud 的处理与dubbo类似。

只需要将需要的调式的服务不要注册到注册中心就行了。

eureka:
  client:
    fetch-registry: true #是否检索服务
    register-with-eureka: false #表示不向Eureka注册自身服务

 

展开阅读全文

没有更多推荐了,返回首页