dubbo遇到的一些问题总结
作为一个高性能的RPC框架,不得不总结下使用过程中遇到的问题
问题一:
有时候我们是比较懒的,测试和生产会公用一套zookeeper,怎么保证消费不冲突?
测试和生产公用同一个zookeeper,且发布相同的服务(相同服务,使用的数据库是不同的),在zookeeper中只有1个服务,是由2个ip地址提供的,问题就出在这个ip身上。zk提供的负载均衡,导致会将空闲消费连接提供给消费者,因此就会导致数据库的不同出现问题。
解决方案:
dubbo提供了Filter扩展,可以通过自定义Filter来实现这个功能。
实现com.alibaba.dubbo.rpc.Filter接口:
参考链接:
https://blog.csdn.net/mj158518/article/details/47379799#
https://blog.csdn.net/peerless_hero/article/details/72667550
问题二:
如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?
答案是可以访问的,启动dubbo时,消费者会向注册中心订阅自己的所需要的服务
生产者会向注册中心注册自己提供的服务。
消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地(当然我们通过查看文件目录,是能找到这些缓存文件,有时候你频繁重启项目,会发现自己写的代码不起作用,就是缓存惹的祸)。如果注册中心集群挂掉后,可以提供短期的服务。但是要尽快恢复
这些功能。
问题三:
在集群中任意一台zk挂掉后,对服务有什么影响?
注册中心对等集群,任意一台宕机后们将会自动切换到另外一台,服务提供者是无状态的,任意一台宕机后,不影响使用。
问题四:
参数从客户传入(参数是存在的),通过dubbo调用之后到任务参数就丢了(传到服务端,参数莫名其妙消失了)
两个系统使用的库版本号不一致,数据序列号和反序列化中出现问题导致的数据丢失,将依赖调整一致后问题解决。
问题五:
服务端查询有数据,经过zk后数据丢失(奇怪吧)
dubbo在数据传输过程中,序列化的时候会将数据存到对象的父类中 但是在子类的对象属性为null 那么在反序列的时候子类的方法会覆盖上去 也就是说反序列的时候会拿到null ,因此造成数据丢失。这中情况多出现在继承上。当时通过将父类上的数据赋值到子类解决的。
问题六:
zk的安全的问题(这或许是个弱智的问题,但是在线上环境不得不考虑数据的安全性,防止非法人员窃取)
设置密码和设置ip白名单
暂时先记录这么多吧,以后再加。。。。。