Java 使用dubbo服务 thrift协议 + MQ实战

本文介绍了从Python转到Java的过程中,使用Dubbo+Thrift构建RPC,Zookeeper作为注册中心,Kafka作为MQ,MySQL和Redis作为数据库的整体架构。在实现过程中,遇到了数据库唯一ID生成、日志记录、消息队列设计等问题,并提出了相应的解决方案,包括使用Snowflake算法,定制日志库,改进消息队列设计以及优化关注feeds的存储结构。同时,文章还提到Java服务相互调用时的并发问题及其解决办法。
摘要由CSDN通过智能技术生成

写一篇博客来记录从 Python 转型到 Java 的学习成果。
整体架构:
    rpc: dubbo + thrift
    idl: thrift
    registeration: zookeeper
    MQ: kafka
    sql: mysql
    noSql: redis 

过程中遇到的问题: 
1. 数据库唯一标示ID
    沿用了 sonwflake 的设计方案, 单个服务每毫秒最大吞吐量为 4096 个ID
2. 日志部分
    目标: 每次请求只有一条info日志, 并且其他日志格式保持统一。(如 warn error)
    日志格式: logID {method request response} {runTime}
    runTime: 可在函数内部自定义计算代码段的运行时间
    解决思路: 
        1. 考虑到一条请求只有一条日志,因此需要重写log库
        2. info 这种日志每次调用还要手动打印出来太费劲了,所以考虑到了用 dubbo SPI filter 扩展
        3. 重写log库 
            1. 单利: 由于dubbo处理每次请求使用的都是不同的线程来处理,所以保证每条请求保证只有一个info日志并且还能把代码段运行时间保证存储在一条日志中这里考虑了单例,不能每次调用接口时都 new 一个新的log对象 1. 不符合个人编码风格,重复的代码太多了。 2. 接口调用内部方法时要记录方法内部的代码段运行时间不容易。 但单利就能很好的解决这个问题。
            2. 保证日志数据为线程级别: 又回到了刚才的问题,dubbo每次请求都是用一个线程来处理当前请求的,所以使用的单利这时候就会出现数据记录错误的问题,这时候考虑到了创建一个容器,用来存储需要打印的数据&

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值