- 博客(119)
- 收藏
- 关注
原创 从0开始搭建一个微服务后端系统-基础入门篇
前言今天开始,我和大家一起,从0开始,基于Spring Cloud Alibaba,搭建一套基本的微服务架构的项目。主要用到下面的知识内容JDK8/IDEA/MavenSpring/SpringBoot/Spring Cloud AlibabaDubbo/openfeign:服务间调用这里之所以引入了两种调用方式,是为了方便根据接口的实际情况,选择合适的调用方式Seata:分布式事务MySQLRedisRabbitMQ/RocketMQRBAC:这里,我不打算使用常见的 Spr
2020-08-30 23:24:07
2801
原创 从0开始构建一个微服务后端系统-04-Nacos简介与环境搭建
什么是Nacos官网https://nacos.io/zh-cn/https://nacos.io/zh-cn/docs/what-is-nacos.html个人理解在一个微服务系统中,服务之间的相互调用是非常频繁的。而服务之间的调用,需要让服务消费者知道服务生产者的信息。这些信息往往是会随着服务生产者重启、更新等操作不断变化的,所以需要进行动态管理。而Nacos,就是用来存储服务生产者信息的。服务消费者,通过从Nacos中获取服务生产者的信息进行有效的服务调用关于Nacos的
2020-08-30 18:32:51
380
原创 从0开始构建一个微服务后端系统-03-创建MyBatisPlus自动代码生成项目
说明整个项目,我打算使用MyBatis-Plus作为持久层框架代码创建一个chan-code-generator项目核心代码:CodeGeneratorpackage com.zhangln.chan.gen;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.g
2020-08-29 23:15:20
257
原创 从0开始构建一个微服务后端系统-02-项目骨架搭建
项目骨架搭建说明1、这是一个Maven工程2、单独创建一个dep项目用来全局管理jar版本实战创建chan项目其pom文件内容为<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca
2020-08-29 23:08:20
297
原创 从0开始构建一个微服务后端系统-01-微服务与Spring Cloud
微服务与Spring Cloud什么是微服务一切事物,都是从历史中来,最终也会消散在历史中在说什么是微服务之前,我们先来看看后端系统的软件架构变迁历史单体应用阶段在这一时期,一个应用的所有功能代码都堆积在一起。随着业务的发展与项目的持续迭代,最终,这种项目将变得越来越臃肿。总结起来,主要有以下几个缺点:可靠性差代码量越大,就越容易产生异常,很容易由于某个功能的异常,导致整个系统的崩溃部署代价大不管我们需要修改的功能是大是小,都需要对整个项目进行部署开发、测试的时候也是,启动
2020-08-29 22:49:02
177
原创 从0开始搭建一个微服务后端系统-00-前言
前言作为一名Java后端工程师,经历过从单体应用到SOA架构,而后又经历了将一个公司的核心项目从单体应用全面改造成微服务架构。从基础的开发者,到小组组长,再到一家创业公司的技术部门负责人。期间经历了各种酸甜苦辣,各种纠结。在这6年的工作经历中,不管是从IT技术上还是工作方法论上,最近回想起来,总有很多想要分享的点。我是个惫懒的人,现在就立下个flag吧,我要在2020年结束前,把微服务这件事情,在自己的理解范围之内,把这件事讲清楚。同时,结合自己的工作经历,对自己这一阶段的工作经历做个小结..
2020-08-29 20:46:17
137
原创 Java并发编程概述
基本概念多线程业务场景异步任务1、用户注册后的异步通知,短信/邮箱2、异步记录日志定时任务定期备份日志、数据库分布式计算分片计算/Hadoop的map-reduce服务器编程Servlet编程模型进程、线程、协程基本概念进程: 本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念,操作系统进行行资源分配和调度的一个独立单位线程:是操作系统能够进⾏运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 ⼀个进程中可以并发多个线程,每条
2020-08-16 14:14:40
204
原创 程序员学习十步法
前言从入行开始,就一直是自学的各种IT技能,中途走过弯路,后来逐步形成了自己的学习方法论。偶然间发现了“十步学习法”,很多地方竟然与我自己的学习方法论不谋而合,不过比我自己思考的更加清晰。我自己原先学些的时候,大概有这么几个步骤这个知识解决了什么问题这个方案是怎么设计解决问题的查找资料全面了解各个资料都在大概讲些什么,有那些大方向上的知识点,确定学习范围一个知识点一个知识点的攻克实战自己写教程或讲授给其他人听以下,为十步学习法中的内容学习前了解全局明确自己要学的到底是个什么定
2020-08-16 01:00:33
352
原创 Java集合详解
基础List什么是List列表ArrayList底层是数组,线程不安全,查询和修改快,增删慢,通过角标操作LinkedList底层是双向链表,线程不安全,查询和修改慢,增删快Vector底层是数组,线程安全,操作的时候使用了synchronized进行加锁MapHashMap基于数组+链表,线程不安全,默认容量16。可以实现快速存储和检索,适用于在map中插入删除和定位元素。允许有空的键和值HashTable基于哈希表实现,线程安全(加synchron
2020-08-05 17:14:26
118
原创 Git使用实践
Git FlowGit 的一大特点就是可以创建很多分支并行开发。正因为它的灵活性,团队中如果没有一个成熟的分支模型的话,那将会是一团糟。有个很成熟的叫 Git Flow 的分支模型,它能够应对 99% 的场景,剩下的那 1% 留给几乎不存在的极度变态的场景。需要注意的是,它只是一个模型,而不是一个工具;你可以用工具去应用这个模型,也可以用最朴实的命令行。所以,重要的是理解概念,不要执着于实行的手段。简单说来,Git Flow 就是给原本普普通通的分支赋予了不同的「职责」:master——最为稳定
2020-07-31 16:39:20
131
转载 代码分层设计
背景一般我们的后端,至少会有这么几层:Controller、Service、Mapper每一层到底该做哪些事情,在一个项目中,一定是需要有一个统一的规范的,否则随着项目的演进,代码质量就会急剧下降,最终不可维护。一个好的应用分层需要具备以下几点:方便后续代码进行维护扩展;分层的效果需要让整个团队都接受;各个层职责边界清晰。基本分层传统的Controller、Service、Mapper三层代码结构,其各层的代码逻辑范围,我一般是如下处理的Controller创建首先是Contr
2020-07-31 15:37:41
956
原创 JVM之运行时数据区
JVM之运行时数据区Java特点1、一次编译,随处运行2、不需要手动处理内存的创建与回收个人看法:Java语言的特点有很多,但是最重要的,其实就是上述两点。并且这两个特性,都是由于Java是允许在JVM中才实现的。由于这两个特性特别实用,也被其他高级语言所借鉴。关于一次编译,随处运行,实际情况下意义并不大,现在的Java程序,要么是跑在Android手机上,要么是作为服务端跑在Linux系统中。很少出现需要跨平台运行的情况。关于不需要手动处理内容,其意思并不是说就不会出现内存溢出,瞎
2020-07-09 23:49:35
122
原创 如何设计一个权限系统?
理解业务模型参考:https://mp.weixin.qq.com/s/TLA1j1ApLdSsFRRoi2boQg不同的业务系统,对应的权限系统的设计是完全不同的所以,一切的起点,在于先明确有被控制的用户主体是谁,有哪些;哪些权限需要控制;怎么控制等等一系列的细节。如果设计到最后发现方向错了,那再精妙的系统都是白搭。技术选型一般在Java的世界里,基于RBAC的认证授权框架有两个,一个是Spring Security,一个是Shiro。如果使用框架的话,无外乎这两个。如果系统需要允许第三方.
2020-05-25 16:20:00
430
原创 给个解决方案
学习的东西多了,发现我们其实不是在学某一门技术,而是面对一个问题,在想一套解决方案。而我们学习的技术,是针对这个问题的一种解决方案的思路。这就好像框架一样,所谓框架,就是对一类问题,有一套自己的解决方案,封装了公共部分,将特性部分开放出来供程序员进行扩展。程序员切记成为某个框架,甚至某种语言的熟练工,只有思想,才是永恒的...
2020-05-25 01:46:02
269
原创 使用Docker安装MySQL、RabbitMQ、Redis开发环境
RabbitMQdocker run -d -p5671:5671 -p5672:5672 \--hostname=rabbitmqhost \--restart=always \-p15672:15672 \-p15671:15671 \-p25672:25672 \--name rabbitmq \-e RABBITMQ_DEFAULT_USER=yiding \-e RAB...
2020-04-17 19:35:29
237
原创 华为云的CentOS7中安装Docker
yum updatewget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum makecacheyum install docker -ysystemctl start docker #启动dockersystemctl enable docker #开机启动doc...
2020-04-17 18:58:45
340
原创 CentOS安装Nginx
1、在CentOs中安装Nginx设置nginx源rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm安装nginxyum install -y nginx设置开机自启systemctl start nginx.servicesystemc...
2020-04-17 15:24:17
108
原创 部署后端SpringBoot项目的Dockerfile
DockerfileFROM registry.cn-hangzhou.aliyuncs.com/sherry/java:8-jdk232-with-skywaling-agentMAINTAINER XX zhangXXln <XX@XXX.com>COPY ./target/auth-svc.jar /usr/app/WORKDIR /usr/appENV T...
2020-04-16 10:23:07
282
原创 SpringBoot中使用MockMVC进行测试
SpringBoot中使用MockMVC进行测试首先得保证已经在pom中引入了以下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</a...
2020-04-11 21:12:02
563
原创 SpringBoot2.X关闭Security的http认证
package com.imooc.config;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.secu...
2020-04-11 20:52:35
1569
原创 Swagger的使用
pom <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${...
2020-04-11 20:11:48
198
原创 p6spy的使用
pom依赖 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>${p6spy.version}<...
2020-04-11 20:06:00
200
原创 在阿里云K8S中部署YAPI
基本思路部署mongo部署yapi部署mongoregistry.cn-hangzhou.aliyuncs.com/sherry/mongo:3.6.9部署yapiregistry.cn-hangzhou.aliyuncs.com/sherry/yapi:latest或者ccr.ccs.tencentyun.com/lvvimage/yapi:latest一回事儿注...
2020-04-11 20:02:19
737
原创 CompletableFuture执行多线程任务
这是一段比较实用的代码段当我们有很多任务需要多线程执行的时候,就可以使用@Slf4jpublic class Demo01CompleteFutureMain { public static void main(String[] args) {// 任务列表 List<Integer> jobList = Arrays.asList(1,...
2020-04-10 23:27:54
1405
原创 控制消费者处理速度
需求有一个MQ消费者在消费日志数据,将各个生产者产生的消息日志进行入库操作现在有这么几个问题1、消费者处理不过来怎么办2、如何降低对数据库的性能影响基本思路使用令牌桶核心代码 <dependency> <groupId>com.github.vladimir-bukhtoyarov</groupId> ...
2020-04-10 23:22:54
339
原创 Shiro核心概念
官网http://shiro.apache.org/introduction.htmlhttp://shiro.apache.org/architecture.html[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2rdihpo-1586338243922)(http://tuchuang.zhangln.com/h6PW9V.png)]核心概念身份认...
2020-04-08 17:31:07
200
原创 ACL与RBAC的比较
ACL与RBAC最大的区别,就是用户是直接挂载权限,还是通过角色去挂载权限。对于RBAC,其实还能继续扩展,就是角色是否还可以继续分组,同一组内的角色,具有相同的权限。角色之间是否允许继承?等等各种认证授权模型,不存在优劣之分,只是适用于不同的场景。具体选择哪种模型,还是得结合实际业务场景...
2020-04-06 17:05:13
935
原创 部署前端项目的Dockerfile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwsa8pKu-1584877081688)(http://tuchuang.zhangln.com/oeRiBI.png)]编写sh脚本#!/bin/bashcnpm run builddocker build -t registry.cn-hangzhou.aliyuncs.com/sherry/he...
2020-03-22 19:38:46
1187
原创 Kubernetes的ExternalName
kind: ServiceapiVersion: v1metadata: name: cloud-micro-svcspec: type: ExternalName externalName: 域名没办法为Service指明端口
2020-03-20 23:26:26
1362
原创 K8S中Service的Ext模式
在某些环境中,应用系统需要将一个外部数据库作为后端服务进行连接,或将另一个集群中的服务作为服务端的后端,这时,可以通过创建一个无Label Selector的Service来实现实战案例Servicekind: ServiceapiVersion: v1metadata: name: pig-svcspec: ports: - protocol: TCP por...
2020-03-18 20:19:06
279
原创 Vue组件化开发
文章目录组件基础注册组件的基本步骤案例:全局组件的基本使用全局组件与局部组件父子组件组件注册语法糖为什么组件中的data必须是函数父子间通讯父传子:props扩展子传父:自定义事件父子间访问父访问子子访问父插槽基本使用具名插槽编译作用域作用域插槽组件基础注册组件的基本步骤创建组件构造器调用Vue.extend()方法注册组件调用Vue.component()方法使用组件...
2020-03-17 23:41:42
108
原创 Vue语法基础
模板语法插值:mustache语法数据绑定最常见的形式就是使用Mustache语法 (双大括号) 的文本插值<span>Message: {{ msg }}</span><span>Message: {{ Firstname+lastName }}</span>插值表达式,可以是一个变量,也可以是一个表达式,可以进行简单的计算但一般...
2020-03-10 22:33:28
206
原创 邂逅Vue
文章目录内容概述Vue简介为什么学习Vue简单认识VueVue安装案例体验HelloWorld列表展示计数器MVVMVue的options选项Vue生命周期内容概述认识Vue为什么学习Vue简单认识VueVue安装方式CDN导入下载引入Vue初体验Hello VueVue列表展示案例:计数器Vue的MVVMVue中的MVVMVue简介为什么...
2020-03-06 23:14:44
1141
原创 Redis解决雪花算法dataId和workId的自动选择问题
文章目录前言算法 1 代码算法 2 代码前言雪花算法是分布式系统中常用的唯一 id 生成算法,一般创建雪花算法的时候,依赖dataCenterId与workerId这两个值的取值都为 0~31 之间的整型。对于一个雪花算法的 id 生成器,需要设置这两个参数值。如果在单实例中,这两个值随便怎么设置都是没问题的,但是对于应用集群部署的时候,为了保证高可用,肯定需要多实例部署。这个时候...
2020-03-06 21:09:47
9983
4
原创 使用Docker搭建solo博客平台
下载镜像docker pull b3log/solo方式1:使用H2数据库docker run --detach --name solo --volume ~/solo_h2/:/opt/solo/h2/ --publish 8080:8080 \ --env RUNTIME_DB="H2" \ --env JDBC_DRIVER="org.h2.Driver...
2020-01-02 19:48:11
1506
原创 基于SpringBoot Netty实现一个自己的推送服务系统
目标实现一个WebSocket服务中心,支持水平扩展技术栈SpringBoot、Netty、JDK8、MySQL、Redis、RabbitMQ、MyBatis-Plus环境搭建主要功能点说明WebSocket连接需要认证服务端提供token获取接口,WS连接前先获取token认证信息由服务端提供Http接口请求需要认证这里的接口一般就是推送接口后续可以把推送记录也做成接口...
2019-12-09 21:10:36
1833
原创 Kubernetes权威指南 第一章:Kubernetes入门
Kubernetes是什么官网https://kubernetes.io/中文版:https://kubernetes.io/zh/Kubernetes是谷歌十几年大规模容器管理经验的成果是Borg的一个开源版本基于容器技术的分布式架构方案Service简介Kubernetes以Service为核心,Service有如下特征唯一名称拥有一个虚拟ip...
2019-12-05 16:49:21
988
原创 记一次订单号重复的异常
多个系统均使用Redis作为id生成器,但是各个系统在配置Redis的时候,使用的Key的序列化器不同。导致其实订单号是在不同的key上执行自增,自然也就重复了。。本文由博客一文多发平台 OpenWrite 发布!...
2019-12-05 10:03:39
1009
原创 Linux设置免密登陆
生成秘钥ssh-keygen -t rsa -C "XX@qq.com",然后一路回车就行生成之后会在用户的根目录生成一个 “.ssh”的文件夹进入“.ssh”会生成以下几个文件authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥id_rsa : 生成的私钥文件id_rsa.pub : 生成的公钥文件know_hosts : 已知的...
2019-12-05 10:02:01
338
原创 工作中常用的运维命令
查看查看当前目录磁盘占用情况 du -h --max-depth=1 ./ du -lh --max-depth=1查看当前文件夹大小 du -h *清理缓存echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys...
2019-12-05 10:00:26
881
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人