Forbid consumer x.x.x.x access service

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

Forbid consumer x.x.x.x access service


异常描述

com.alibaba.dubbo.rpc.RpcException: Forbid consumer x.x.x.x access service com.xxx.service.RpcService from registry y.y.y.y:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist)


异常场景

  • 项目架构
    • 按照业务划分系统:用户中心、营销中心、交易中心、订单中心、供应链、订单中心
    • 每个系统对应一个所属数据库
    • 系统间通过 dubbo 接口相互访问
  • 用户中心职责:
    • 系统:供各个系统调用,每个系统业务处理逻辑均需要调用用户信息,判断用户状态
    • 功能:用户注册、登录、签到等功能
  • 昨晚刚发布新功能,今早大量用户访问,九点左右客服群反馈系统奔溃奔溃,无法访问
  • 由于项目价格体系的限制的,各个中心间不完全是直接调用,部分需要通过中间项目进行中转,于是查看中间项目日志,提示用户中心dubbo 接口调用失败

异常分析

  • 从日志分析,调用频率过高,且所有查询均无缓存处理,导致所有查询直接查询数据库,数据库连接数不够,系统出现异常
  • 项目中存在大量的定时任务,定时任务批量处理数据时没有做相应的分页处理,直接全表扫描
  • 由于 dubbo 接口的注册中心的服务提供方系统奔溃,导致调用方找不到接口,所以抛出上述异常

异常修复

  • 增加缓存处理,所有对外RPC接口提供缓存处理机制
  • 用户中心接口需要做缓存处理,且缓存不应该由调用方处理,缓存管理放入缓存与缓存取出应该放在同一个方法中便于管理;缓存失效时期,缓存数据更新问题等等

触类旁通

  • 如何快速定位问题
    1. 检查 dubbo 该项目的接口是否有提供者,是否系统奔溃
    2. 检查 dubbo 的consume 文件,检查服务注册项目的 provider 文件
    3. 检查 服务调用项目与服务提供项目的ZK地址是否相同
    4. 检查 dubbo 注册中心地址是否正确,是否是该环境配置的IP地址(团队开发过程中可能被其他人修改)
    5. <dubbo:registry protocol="zookeeper" address="${zookeeper.address}"/>
    6. 检查 comsume.xml 文件中接口Id 与 provider.xml 中接口 id 是否相同
    7. 检查不同的项目中的provice.xml 或 comsumer.xml 是否有重名Id
    8. 检查dubbo 注册中心配置是否正确
  • 参考资料

异常原因

猜你喜欢

转载自blog.csdn.net/mingyundezuoan/article/details/82795021
x