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神器碰上共用注册中心和错误的暴露接口的更多相关文章

  1. Dubbo+ZK与Eureka注册中心比较

    Eureka可以很好的应对网络故障导致部分节点失去联系的情况,而不会像zk那样因为选举导致整个集群不可用 dubbo + zk 当向注册中心查询服务注册列表时,可以容忍注册中心返回的是几分钟以前的注册 ...

  2. Dubbo源码学习--注册中心分析

    相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 注册中心 关于注册中心,Dubbo提供了多个实现方式,有比较成熟的使用zookeeper 和 redis 的 ...

  3. 使用dubbo中间件的zookeeper注册中心时报错

    在项目中搭建soa项目时,使用dubbo服务中间件时需要在虚拟机中创建一个zookeeper注册中心,在配置都没有问题的时候,如果服务端启动成功,但是消费端启动报错并且看不出据地位置时,一定要注意你的 ...

  4. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  5. dubbo 学习(5) dubbo多协议和多注册中心

    转载 http://blog.csdn.net/songjinbin/article/details/49498431 一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和N ...

  6. dubbo 多协议和多注册中心

    一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况.Dubbo缺省协议不适合 ...

  7. Dubbo环境搭建-ZooKeeper注册中心

    场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 注: 博客: https:// ...

  8. Dubbo(二):zookeeper 注册中心

    zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并 ...

  9. dubbo配置多个注册中心

    用法: <dubbo:registry address="zookeeper://10.0.1.131:2181?backup=10.0.1.132:2181,10.0.1.133:2 ...

随机推荐

  1. Facebook AI的工业级NLP开源框架—— Pytext

    PyText是基于NLP深度学习技术.通过Pytorch构建的建模框架.PyText解决了既要实现快速实验又要部署大规模服务模型的经常相互冲突.并且,Facebook已经采用了使用PyText快速迭代 ...

  2. Java学习-051-Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError

    错误信息:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting St ...

  3. C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...

  4. 美团笔试(web前端)

    分为3部分: 1.逻辑推理.行测.找规律: 2.html css javascript的简单的选择题,以及数据结构,操作系统方面的知识: 3.两道编程题,第一道题关于竞赛报名,有限制的分组,输入N和M ...

  5. spring-session 2.0 实现细节

    一. 前置知识 1. redis 在键实际过期之后不一定会被删除,可能会继续存留 2. 具有过期时间的 key 有两种方式来保证过期 一是这个键在过期的时候被访问了 二是后台运行一个定时任务自己删除过 ...

  6. action,func简洁用法

     new Action(() => { }).Invoke();new Action(() => { })();    new Func<int, int>(s => { ...

  7. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use

    在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...

  8. [LeetCode] 97. Interleaving String_ Hard tag: Dynamic Programming

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Example 1: Input: s1 = ...

  9. python 选课系统

    couser.py: import sys,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.pa ...

  10. Cocos Creator 监听安卓屏幕下方返回键

    addEscEvent = function(node){ cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyP ...