微服务化的大坑之一:当dubbo神器碰上共用注册中心和错误的暴露接口
dubbo是国内用比较多的微服务化系统,非侵入(意思就是说不用自己写代码,把xml配置好就可以用了,这个xml的引用注解就注在springboot的开启main类里面就可以了),提供好用的均衡和容错机制,使用RPC通信加快响应速度(适用于多次小数据请求,如果是大的用rmi或http交互更好),对中小网站的优化还是好用的。
但是不是什么系统和什么接口都可以放dubbo上微服务化,以及不要错误地使用dubbo。
举个例子,有个springboot+dubbo系统在SVN上使用的是服务器的zookeeper注册中心,由于SVN上的代码会被jenkins实时部署到服务器上,这个zookeeper注册中心就有了服务器的那些服务。放在本地测试的话,由于本地的系统用的是服务器的注册中心,本机和服务器的消费者(api)都有可能被分配到对方的生产者(service),导致返回错误数据。
那时我就碰到这个问题。。。还想着用redis做注册中心,结果没注册成。把本地系统的数据库链接改到服务器上后,数据不统一的问题解决了,但是token错误还是没解决。
这个问题一直困扰着我,直到自己在本地搭zookeeper并把注册中心搭在本地zookeeper才解决。
打开本地的dubbo-admin,看服务列表才发现了问题。
系统验证用户登录和授权用户秘钥,都是使用redis这个数据库储存的token,而验证token的接口,com.heiho.redis.common.RedisCommand,它的实现是放在service端,不是直接接收http请求的api端,这个操作也开了接口给dubbo,结果验证这个操作也是要经过dubbo,会被随机请求到不同地址。服务器端的redis地址和本地的redis地址都设的localhost,这导致了这2个生产者请求的redis数据源不同,同样的帐户密码,在不同数据库储存的密钥是不同的。
解决方法:要么像我一样开zookeeper在本地,然后把注册中心改到本地;要么这个系统的dubbo配置文件要改,至少com.heiho.redis.common.RedisCommand在api端一定要实现一个,并且不通过请求生产者的服务获得秘钥。
微服务化的大坑之一:当dubbo神器碰上共用注册中心和错误的暴露接口的更多相关文章
- Dubbo+ZK与Eureka注册中心比较
Eureka可以很好的应对网络故障导致部分节点失去联系的情况,而不会像zk那样因为选举导致整个集群不可用 dubbo + zk 当向注册中心查询服务注册列表时,可以容忍注册中心返回的是几分钟以前的注册 ...
- Dubbo源码学习--注册中心分析
相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 注册中心 关于注册中心,Dubbo提供了多个实现方式,有比较成熟的使用zookeeper 和 redis 的 ...
- 使用dubbo中间件的zookeeper注册中心时报错
在项目中搭建soa项目时,使用dubbo服务中间件时需要在虚拟机中创建一个zookeeper注册中心,在配置都没有问题的时候,如果服务端启动成功,但是消费端启动报错并且看不出据地位置时,一定要注意你的 ...
- dubbo入门学习 四 注册中心 zookeeper入门
一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...
- dubbo 学习(5) dubbo多协议和多注册中心
转载 http://blog.csdn.net/songjinbin/article/details/49498431 一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和N ...
- dubbo 多协议和多注册中心
一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况.Dubbo缺省协议不适合 ...
- Dubbo环境搭建-ZooKeeper注册中心
场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 注: 博客: https:// ...
- Dubbo(二):zookeeper 注册中心
zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并 ...
- dubbo配置多个注册中心
用法: <dubbo:registry address="zookeeper://10.0.1.131:2181?backup=10.0.1.132:2181,10.0.1.133:2 ...
随机推荐
- Spring-day02
Annotation复习:1,Annotation:作为类型的元数据; 1,给类型加标记; 2,annotation可以添加各种类型的属性;2,Annotation的上的标记: 1),target:标 ...
- 配置Mqtt
一.java后台调用MQTT 准备工作:需要导入的jar包 <!-- mqtt依赖包--> <dependency> <groupId>org.fusesource ...
- 使用OMS查询Api Management的调用日志
打开Azure portal,找到要操作的Api Management 实例,点击菜单Monitoring/Logs Schema Tab页搜索"diagnostics",选中Lo ...
- Visual Studio Code for mac 设置中文
1,mac系统VScode设置中文 macOS 快捷键:command + shift + p 输入搜索 configure language 1.Ctrl+Shift+P 打开命令 2. ...
- JavaScript字符串相关
嘛,开头来个定义好了! 首先它是JavaScript基本数据类型之一.字符串由零或多个16位Unicode字符组成的字符序列,用''或者""表示. 它有一些转义序列,例如\n ...
- CST2017 安装问题
1.需要修改破解文件license 中的电脑名称 2.若lincense 中有时间限制 需要把时间都修改 比如 到期为 1-jan-2018 则修改为1-jan-2019 所有的都需 ...
- NSRunLoop 在mac command line tool上的部分运用
首先RunLoop相关博客参考这篇https://blog.csdn.net/lengshengren/article/details/12905627. 最近开发了一个mac上的命令行工具,我在主线 ...
- sping Bean 的生命周期是如何被管理
1. 实例化一个Bean,也就是我们通常说的new 2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入 3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的 ...
- 干货 | LIDAR、ToF相机、双目相机如何科学选择?
点击"计算机视觉life"关注,置顶更快接收消息! 本文阅读时间约5分钟 本文翻译自卡内基梅隆大学 Chris asteroid 三维视觉技术的选择 传感器参数及定义 LIDAR ...
- 005-CSS让页脚始终在底部不论页面内容多少
让页脚始终在页面底部,不论页面内容是多或者少页脚始终在页面底部. 方案一: <!DOCTYPE html> <html> <head> <meta chars ...