spring-cloud
竹木一540
这个作者很懒,什么都没留下…
展开
-
框架搭建自我见
搭建框架不仅是技术选型或编写代码,也是制定一套标准。文章目录前言一、搭建框架概述前言最近和别人聊起技术选型,以及框架搭建,别人经常说,很简单的事情。但我却以为,这其实是一件复杂无比的事。我从没看过有人能把这件事做好,包括我自己在内。我以为搭建框架不仅是技术选型,或编写代码,它也是一套开发规则的制定过程。我打算写几篇文章,从我的工作实践出发,聊聊自己是如何搭建框架的。这可能是一篇很长的文章,我可能会分几篇去写,也可能在此篇的基础上不停地添加新内容PS:我写博客的目的,一是为练练手,二是为了理.原创 2020-11-02 19:29:08 · 164 阅读 · 0 评论 -
创建项目的shell脚本
echo "请输入描述"read descriptioncontent_path=appjava_path=${content_path}/src/main/java/java_resouce_path=${content_path}/src/main/resourcesapplicationPath=${java_path}com/shangqiao56/tms/$subpackage/main_package=com.shangqiao56.tms.${subpackage}r原创 2020-10-30 20:16:51 · 157 阅读 · 0 评论 -
Redis一致性方案
尽管到目前为止,我在项目中还没有遇到缓存不一致问题,(遇过一次是因为代码遗漏原因)。就是那次让我考虑缓存不一致的解决方案,网上有很方案,例如加锁,消息队列,或延迟删除,还有监控binlog日志,还有用LUA实现乐观锁,但我一直为这些方案都不是太理想化,要么增加了系统的复杂度,要么不能做到实时一致性。一天我漫步在一个江南水乡的小镇上,我突然奇想,很多方案都是利用串行化的方式,实现缓存一致性。那我为什么不能利用数据库的特性去实现呢?于是有了以下方案:首先关系数据库中对同一记录写与写之间是互斥的,这表示一个写事原创 2020-10-26 14:22:31 · 181 阅读 · 0 评论 -
程序中的时间问题
知识的盲区往往会影响到程序编程。对于只有锤子的人来说,所有问题都是钉子。缘由:前不久,一个做前端的同事联系我,他说一个时间控件接收到后端的数据后,显示时总是少了8个小时,他想用网上的个工具类,对时间进行加8的运算,以达到理想效果。我以前,在一大厂里撸代码,发现所有跟时间格式化相关的,都会减8操作后,再格式化,而且注释说明了:转成utc时间(都已经知道UTC时间了,还这样搞)。计算机的时间其实是一个长整型数,专业一点的术语叫时间戳,不同国家,或者不同地点,对同一时间的表示确不同,我现在的当前时间是.原创 2020-10-19 17:26:09 · 948 阅读 · 2 评论 -
接口标准设计与实现
我的接口标准设计与实现简介Restful协议项目中常见的方案。我的实现简介我想要在本篇博客中介绍一下我在Http Api制定上的一些实践,重点介绍api的返回格式,及实现及前端的处理流程。Restful协议网上的资料很多,不用多作介绍。优点:充分利用了Http的特性,正宗,规范。缺点:1. 实现起来很麻烦,我在spring的官方示例中看过以下代码return HtttEntity.code(HttpStatus.NO_DEFIND).body(...); //模拟代码,别当真contr原创 2020-10-17 15:09:18 · 806 阅读 · 0 评论 -
code review总结
文章目录前言一.error日志二 装箱与拆箱三 没完没了的字符串四 过多的嵌套五 乱拷贝六 引用了不该引用的jar包。前言一六年,我参与了一个我有生以来的最高大尚的项目,我在项目中负责某功能计费模块的开发,尽管总个项目投入了很多人力,还有引进了很多先进的工具和管理方式,但那还是我有生以来见过最糟的项目之一一七年,我去朋友的创业公司,帮他组建团队,一九年至今年,我于一家物流公司担任架构方面的工作,在开发中,我常见那种写业务能力很强,但代码细节惨不忍睹的开发者,于是我想整理一些我见过的代码片断,并提供一原创 2020-10-08 21:56:17 · 461 阅读 · 0 评论 -
利用BlockingQueue进行批量操作
1 背景我曾接触一个项目,业务数据用Hbase存储,为了方便查询统计,采用elasticsearch作为查询库,但直接操作elasticsearch对性能有致命的影响。于是引用了rabbitmq + springstream来实现削峰操作。一开始,接收到一条消息后,我便将其插入到elasticsearch,但消费终始终太慢,于是改用调用ES批量操作的接口,且用异步多线程的方式插入。2 方案用生产者消费者的方式实现,接收到消息后,立即将消息插入到本地消息队列。另启几个线程消费线程消费消息,消费线程在消原创 2020-10-07 19:38:04 · 2546 阅读 · 0 评论 -
论jar的启动与停止方式(待修改)
nohup 服务启动与kill -9 服务停止当我们用mvn package 打包好一个spring-cloud项目的jar, 然后上传到服务器,用 java -jar xx.jar运行,当我们退出命令行,或按ctl+c时,发现服务已不在运行。于是往往会用如下命令启动nohup java -jar xxx.jar &用如下命令停止运行中的服务kill -9 12343以上命令确实能正常启动服务,还能确保服务不会因为不会因为终端退出而被终止。我相信大部会人都是这样做的。但它却存在一个致原创 2020-10-05 22:27:11 · 463 阅读 · 0 评论 -
spring-cloud配置文件3
为了解决用户模块与业务模块的耦合,我想到用策略模式来来实现两套获取当前用户的方案。首先我要定义一个获取当前登陆用户的接口,如下:package com.shangqiao56.tms;import com.shangqiao56.User;public interface UserHolder<T extends User> { T getUser();}接着是一个controller的基类,并用getCurrentUser表示获取当前用户public class T原创 2020-10-03 15:02:56 · 115 阅读 · 0 评论 -
spring-cloud配置文件2
在上篇文章里提到了通过禁用服务发现和配置中心来方便开发,那么问题来了,如果我们要用Ribbon访问某远程服务,我们该如何做呢。虽然开发环境禁用了服务发现,无法获取服务列表,但我们可以通过配置文件为某服务配置一个静态地址。pda-sync: ribbon: listOfServers: 13.13.31.9:9509rms-route: ribbon: listOfServers: 17.11.144.30:8083以上配置了两个静态的地址,我们结合Ribbon可以直接用服务原创 2020-10-02 10:13:00 · 54 阅读 · 0 评论 -
spring-cloud配置文件随笔
在我多年工作经验中,接触到的很多分布式项目都将开发引入了无底的深渊,因为痛苦的经历太多,所以在我成为一名架构,搭建分布式架构时,我努力避开那些深渊,使团队中的业务开发人员不至于掐死我。从前年时,我开时接触微服务架构(主要是spring-cloud技术栈),综观网上流行的一些开源项目,或者有些开发者搭建微服务平台,感觉他们太过把微服务当微服务了,以至于根本就无法分模块开发。主要原因是搭建者不了解spring-cloud框架,或者经验不足,不明白开发环境与测试环境(或正式环境)解耦的重要性。我本人主张轻便开发原创 2020-09-29 11:51:04 · 160 阅读 · 0 评论