美文网首页
项目中的实践与思考

项目中的实践与思考

作者: 晴天哥_王志 | 来源:发表于2021-04-18 15:09 被阅读0次

开篇

  • 近两个星期参与了一个比较完整的项目,项目背景在这里就不做过多介绍了,这里只是想简单总结下项目过程中涉及的一些技术方案,权当给自己之前纠结的技术和业务的方向做一个阶段性的总结。

  • 在这个总结中对我个人而言既有已经技术点的回顾,又有新技术点的使用,这也是我为什么会写这篇总结的原因。

  • 在这个项目中我们使用了一些中间件的技术,包括RabbimtMq、Redis、HttpClient等,这些都是日常比较常用的。

RabbitMq重试

  • 这是一个大家都会遇到的问题,在一套测试环境中存在多个消费者消费同一个主题的消息,但是我们的最新消费逻辑的代码只会在其中一个消费者中部署,这就导致测试过程中无法保证消息都会被最新的代码逻辑消费到。

  • 为了解决指定机器消费消息,研究了下RabbitMq的重试机制后发现可以利用重试机制来解决这个问题。通过在消费侧增加代码用来判断当前机器是否在配置中心指定消费的机器ip地址,如果不是指定机器的消费我们就直接抛出异常来让RabbitMq进行重试直到指定机器的消费。

  • 整个解决方案的核心在于了解RabbitMq的重试机制并知道如何进行利用,至于增加判断代码我们使用了Interceptor,只是为了让代码显得有些逼格。

Redis的lua脚本

  • 关于Redis,大家熟知内容包括Redis从3.0版本开始引入集群模式,Redis是读写处理是单线程的并且线程安全的。
  • 在项目中我们用Redis来实现一个固长的队列并支持批量消费。整体解决方案是基于Redis的List数据结构和Lua脚本。
  • Redis的固长队列我们使用Lua脚本,在Lua脚本中判断List的长度并且在达到长度后丢弃最早的数据并插入最新的数据,使用是LPOP和RPUSH的组合命令。
  • Redis的批量消费我们使用Lua脚本,在Lua脚本中使用LRANGELTRIM组合命令来实现的。
  • Redis 3.0是支持集群模式的,所以在一个Lua脚本当中只能针对单个key进行操作,否则会出现多个key不在一个redis槽的问题。
  • Redis 3.x 和 4.x版本针对Lua脚本中对nil类型的数据处理是一致的,这部分建议查看Redis的官网的语法,Lua脚本对nil的处理是当作false。

Jedis的集群模式

  • 项目中访问Redis使用的是Jedis的客户端,之前对Jedis的源码就有阅读的经验,这次刚好借项目之便又重新看了一次。
  • Jedis针对Redis的集群模式的访问是通过cluster slots命令进行发现并给予发现的master节点进行连接处理的,这部分逻辑已经完成整理并准备公司内部技术投稿。
  • Jedis的集群模式下的连接管理是通过apache common pools进行管理的,DBCP应该也是使用它来实现对象复用管理的,有兴趣的可以研究研究。

HttpClient的多线程问题

  • 项目中通过HttpClient访问外部网站,借项目之便顺带研究了下多线程访问HttpClient的逻辑,可以减少频繁重新连接的开销。
  • 整体的思路可以参考之前我写的文章HttpClient介绍和使用,针对HttpClient的连接池管理抽空再写篇文章进行分析。

相关文章

  • 项目中的实践与思考

    开篇 近两个星期参与了一个比较完整的项目,项目背景在这里就不做过多介绍了,这里只是想简单总结下项目过程中涉及的一些...

  • Retrofit2.0项目中实践

    前言 项目中开始使用retrofit2.0作为网络框架,注解的形式使用起来确实简洁。2.0版本相比之前有了比较大的...

  • 思考与实践

    为了拥有幸福和有你的人生而奋斗 人总是不小心就会忘记一些东西,所以才有那一句:虽然懂得很多道理,但是还是过...

  • 实践与思考

    以后在写看书,写代码时,多思考,用自己的语言把自己思考得到的东西表述出来。

  • 思考与实践

    在出差两天的时间读完了《超译尼采:从尊重一事无成的自己开始》。因为在来的路上,向身边的前辈学习了一个方法——每天订...

  • 思考与实践

    来二中已三月有余了,回顾这段日子,似乎目标明确、措施得当、成效较好,自我也感觉到干劲十足精力充沛,工作都在走...

  • 思考与实践

    非宁最近对于发言有点犯怵。 似乎每次都是逻辑混乱,词不达意,或者是有点啰哩巴嗦。 好吧,虽然没有那么夸张,但是每次...

  • WKWebView 键值监听 canGoBack与canGoFo

    最近项目中需要实现 WKWebView 的后退与前进功能。经过实践,WKWebView 调用 goBack() 或...

  • 《健康心语》连载(91)

    《健康心语》连载(91) 第四章 思考感悟与探索实践 第四节 理论探索与实践 我的康复理论与实践(二) 我的实...

  • 《第五项修炼》学习型组织的艺术与实践

    《第五项修炼》学习型组织的艺术与实践 学习型组织的艺术与实践 以下大量原文引用自第五项修炼 学习型组织的真谛:活出...

网友评论

      本文标题:项目中的实践与思考

      本文链接:https://www.haomeiwen.com/subject/qrpmlltx.html