动态配置与服务屏蔽
服务提供者:user-service-provider
服务消费者:order-service-consumer
场景一:屏蔽消费者
1.屏蔽后会默认添加一条动态配置
2.发起请求后,提供者的服务默认会返回null
场景二:返回指定的json
1.给消费者新增屏蔽的动态配置
2.消费者无需屏蔽,开启屏蔽的动态配置,即使没有服务提供者,所有请求都会返回指定的内容(但是容错的动态配置只有在服务提供者调用超时的时候才生效)
通过代码实现
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://127.0.0.1:2181")); registry.register(URL.valueOf("override://192.168.126.1/com.example.springboot_demo.service.UserService?category=configurators&dynamic=false&application=order-service-consumer&getUserAddressList.mock=force:return {\"name\":\"小明\",\"age\":30}"));
其中:
override://
表示数据采用覆盖方式,支持override
和absent
,可扩展,必填。0.0.0.0
表示对所有 IP 地址生效,如果只想覆盖某个 IP 的数据,请填入具体 IP,必填。com.foo.BarService
表示只对指定服务生效,必填。category=configurators
表示该数据为动态配置类型,必填。dynamic=false
表示该数据为持久数据,当注册方退出时,数据依然保存在注册中心,必填。enabled=true
覆盖规则是否生效,可不填,缺省生效。application=foo
表示只对指定应用生效,可不填,表示对所有应用生效。timeout=1000
表示将满足以上条件的timeout
参数的值覆盖为 1000。如果想覆盖其它参数,直接加在override
的 URL 参数上。
示例:
-
禁用提供者:(通常用于临时踢除某台提供者机器,相似的,禁止消费者访问请使用路由规则)
override://10.20.153.10/com.foo.BarService?category=configurators&dynamic=false&disbaled=true
-
调整权重:(通常用于容量评估,缺省权重为 100)
override://10.20.153.10/com.foo.BarService?category=configurators&dynamic=false&weight=200
-
调整负载均衡策略:(缺省负载均衡策略为 random)
override://10.20.153.10/com.foo.BarService?category=configurators&dynamic=false&loadbalance=leastactive
-
服务降级:(通常用于临时屏蔽某个出错的非关键服务)
override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return null
注:动态配置可以在一个服务下添加多个方法mock返回值,分别多次进行添加,如果添加了相同的方法则mock返回值返回最先添加的