问题描述
无法解决微服务在访问UAA后的方法缓存 在UAA数据变更后的清除(刷新)
问题出现的环境背景及自己尝试过哪些方法
1、有一个自定义的UAA,关于用户信息添加了获取缓存,然后实现了操作用户清理缓存,这里没有问题。
2、有若干个微服务,调用了UAA提供的接口,然后结合调用了微服务自身的功能获取了数据,然后将数据进行缓存了。
使用的是部门主管的权限(主管的登录名login),获取的是部门所有人。
3、对UAA的数据进行刷新(将主管的权限调整为普通用户, 升降级操作),再次进行第二步的操作,参数为主管的登录名login,进来后就直接走了缓存,而缓存中的数据是上次获取的作为主管的权限获取的全部数据,不管是权限多了还是少了,获取的权限都是原先主管的数据。
4、解决方案1:第二步的数据改为先获取UAA数据(判断有没有变动),然后获取服务内数据。改方案的问题是,每次请求都会访问UAA导致UAA压力过大,所以决定还是要在服务内设缓存。
5、解决方案2:在UAA变动后发送RabbitMq,各个服务监听到后作出相应的处理,问题在于每有一个微服务的一个地方调用,UAA就要发送一个相关的消息,服务监听方法还要作出相应的处理。这个是不到万不得已也不想使用。
预期的功能
有个办法解决服务的缓存在UAA数据变更后能够清除当前的无效缓存或者再次进入当前服务的缓存方法是不会命中缓存。