SpringCloud微服务Zuul网关动态路由

这篇文章不止是普通的动态路由,他可以帮你将zuul网关由静态路由升级为动态路由,还可以在路由之后,再将利用自定义规则实现同一个URL请求根据用户(或者别的属性)访问到不同的服务中。

我在的公司是个半外包的公司,想做成一个产品但是又要满足不同客户的不同需求。采用微服务拆分所有业务模块,每一个业务模块根据不同的客户可能会有不同的场景。对于前端请求和后端服务间相互调用来说,不可能因为一个模块新增了一种业务场景就重写或者修改一次代码。于是就想,同一个模块的所有场景能否用同一个URL来请求,根据客户不同来请求不同的服务的接口。这样就有了这两个动态路由和场景选择。

源码在这里:动态路由源码 ,这个项目是我的微服务脚手架项目,基于eureka-zuul构建的。

zuul动态路由

1. 网关层动态配置路由映射规则

动态配置与网上其他文章的思路是一样的,继承org.springframework.cloud.netflix.zuul.filters.SimpleRouteLocator重写locateRoutes方法并实现org.springframework.cloud.netflix.zuul.filters.RefreshableRouteLocator接口的refresh方法。

SimpleRouteLocator是zuul基础路由加载类,初始化的时候自动将配置文件中配置的路由规则加载到内存中,重写locateRoutes方法将路由规则配置改为自定义的源。RefreshableRouteLocator接口仅提供刷新路由表的方法,实现很简单。

代码如下:

/**
 * 动态路由实现
 * @author 無痕剑
 * @date 2018/11/15 22:05
 */
public class DynamicRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {

	/**
	 * 是否启用动态路由。
	 * 在配置文件中:saas.routes.dynamic.enabled,默认为false
	 */
	private boolean enabled;

	public DynamicRouteLocator(boolean enabled, String servletPath, ZuulProperties properties) {
		super(servletPath, properties);
		this.enabled = enabled;
	}

	/**
	 * 重载路由规则
	 */
	@Override
	protected Map<String, ZuulProperties.ZuulRoute> locateRoutes() {
		if (!enabled) {
			return super.locateRoutes();
		}
		Map<String, ZuulProperties.ZuulRoute> routeMap = new HashMap<>();
		// 从数据源获取路由配置
	
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值