- 博客(21)
- 问答 (4)
- 收藏
- 关注
原创 Spring Cloud Alibaba(Seata分布式事务)
概况单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没办法保证。通俗的讲就是,一次业务操作跨多个数据源或需要多个系统进行远程调用,就会产生分布式事务问题。而Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。官网:传送门分布式事务过程:Transaction ID(XID):全局唯一的事务ID。Trans
2021-02-27 19:59:45
242
原创 Spring Cloud Alibaba(Sentinel熔断与限流)
概况官网:传送门中文:传送门主要特性:安装下载:传送门核心:**核心库(Java客户端):**不依赖任何框架/库,能够运行于所有Java运行时环境,同事对Dubbo/Spring Cloud等框架也有较好的支持。**控制台(Dashboard):**基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。运行:java -jar sentinel-dashboard-1.7.0.jar登录Sentinel管理界面:http://localhost:808
2021-02-25 17:09:32
189
原创 Spring Cloud Alibaba(Nacos服务注册和配置中心)
简介一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台。Nacos就是注册中心和配置中心的组合,等价于Eureka+Config+Bus官网:传送门官方文档:传送门、传送门通过官网下载后,进入安装目录的startup.cmd执行即可启动。通过访问http://localhost:8848/nacos即可,默认账号密码都是nacos注册中心配置Maven配置<!--SpringCloud ailibaba nacos --> <dependency
2021-02-25 14:37:45
235
1
原创 Spring Cloud微服务笔记十(Sleuth链路跟踪)
概况在微服务框架中,一个客户端发的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一个复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。官网:传送门搭建使用下载:Spring Cloud从F版已不需要自己搭建ZipkinServer了,只需要调用jar包即可,传送门运行Zipkinjava -jar zipkin-server-2.12.9-exec.jar访问:http://localhost:9411/zip
2021-02-24 15:47:51
101
原创 Spring Cloud微服务笔记九(Stream消息驱动)
概况官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。应用程序通过inputs或者outputs来与Spring Cloud Stream中的binder对象交互。通过我们配置来binding(绑定),而Spring Cloud Stream的binder对象负责与消息中间件交互,所以,我们只需要搞清楚如何与Spring Cloud Stream交互就可以方便使用消息驱动的方式。通过使用Spring Intergration来连接消息代理中间件以实现消息事件驱动。Spri
2021-02-24 15:27:32
146
原创 Spring Cloud微服务笔记八(Bus消息总线)
概况Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。Spring Cloud Bus目前支持RabbitMQ和Kafka。Spring Cloud Bus能管理和传播分布式系统间的消息,就像分布式执行器,可以用于广播状态更改、时间推送等,也可以当做微服务间的通信通道。在微服务框架的系统中,通常会使用轻量级的消
2021-02-23 15:32:18
195
原创 Spring Cloud微服务笔记七(Config配置中心)
概况Spring Cloud Config为微服务架构中的微服务提供集中化的外部部署支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。Spring Cloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器应为客户端提供获取配置信息,加密/解密信息等访问接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载信息配置服务器,默认采用git来存储配置信息,这样就有
2021-02-23 14:54:32
75
原创 Spring Cloud微服务笔记七(Gateway网关)
概述在Spring Cloud微服务中有一个很重要的组件就是网关,在开始的1.x版本中都是采用的Zuul网关,但在2.x版本中,由于Zuul的跳票,Spring Cloud自己研发了Zuul的替代版,也就是Gateway。Gateway是在Spring 生态系统之上构建的API网关,旨在提供一种简单而有效的方式来对API进行路由,目标是提供统一的路由方式,且基于Filter链的方式提供了网关的基本功能,例如:安全、监控/指标和限流。官网地址:传送门**作用:**反向代理、权健、流量控制、熔断、日志监
2021-02-23 11:00:52
210
原创 Spring Cloud微服务笔记六(Hystrix熔断器)
分布式系统问题往往分布式系统结构中的应用程序,互相存在一定的依赖关系,每个依赖之间在某些情况将不可避免的失败,容易造成系统的崩溃。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用了其他的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的响应时间过长或者不可用,对位服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。对于高流浪的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源在几秒钟内饱和。比失败更糟糕的是,这些应
2021-02-22 16:59:10
199
原创 Spring Cloud微服务笔记六(OpenFeign接口调用)
概况Feign是一个生命是WebService客户端。使用Feign能让编写的WebService客户端更加简单,他的使用方法是==定义一个服务接口,然后在上面添加注解,==Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters,Feign可以与Eureka和Ribbon组合使用以支持负载均衡。Feign旨在使编写Java Http客户端变得更容易,在使用Ribbon+RestTempl
2021-02-22 11:23:03
120
原创 Spring Cloud微服务笔记五(Ribbbbon负载均衡)
概述Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具。简单地说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等,也就是在配置文件中列出Load Balance(简称LB)后面所有的机器,Ribbon会自动的帮助你基于规则(轮询、随机等)去连接及其。相对容易的使用Ribbon实现自定义的负载均衡算法。Ribbon与Nginx的区别Nginx
2021-02-20 17:28:57
143
原创 Spring Cloud微服务笔记四(注册中心小结)
CAP理论C(Consistency):强一致性A(Availability):可用性P(Parttition):分区容错性核心:一个分布式系统不可能同时满足一致性、可用性、分区容错性三个需求,因此,根据CAP原理将NoSql数据库分成了满足CA原则、满足CP原则和满足AP原则的三大类;CA:单点集群,满足一致性,可用性系统,通常在可扩属性上不太强大。CP:满足一致性,分区容错性的系统,通常性能不是特别高。AP:满足可用性,分区容错性的系统,通常对一致性要求低一些。注册中心语言C
2021-02-20 16:10:07
80
原创 Spring Cloud微服务笔记三(Consul)
概况Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用G哦语言开发。提供了微服务系统中的服务之力、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用构建全方位的服务网络,总之Consul提供了一种完整的服务网格解决方案。有点包括:基于raft协议,比较简洁;支持健康检查,同事支持HTTP和DNS协议,支持跨数据中心的WAN集群,提供图形界面,跨平台,支持Linux、Mac、Windows功能服务发现:提供HTTP和DNS两种方式健康检
2021-02-20 15:56:58
86
原创 Spring Cloud微服务笔记二(Zookeeper)
概况ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。安装与部署自行百度,参考别的文档。依赖包: <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>z
2021-02-20 15:15:33
79
原创 Spring Cloud微服务笔记二(Eureka)
基础知识服务注册Eureka采用了CS的设计框架,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka客户端连接到Eureka Server并维持信条连接。这样系统的维护人员可以通过Eureka Server来监控系统中各个微服务是否正常运行。在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如服务地址,通讯地址等以别名的方式注册到注册中兴上。另一方的消费者或服务提供者以该别名的方式去注册中心上获取到市级的服务通
2021-02-20 14:38:32
88
原创 Spring Cloud微服务笔记一
Spring Boot与Spring Cloud版本依赖查看地址官网查看地址:https://spring.io/projects/spring-cloud#overview更加详细的擦看地址:https://start.spring.io/actuator/info服务架构目前主流的服务架构为以下部分,根据不同情况具体采用:服务注册中兴:Eureka、Zookeeper、Consul、Nacos;服务调用(方式):Ribbon、LoadoadBalancer;服务调用 :Feign、Op
2021-02-20 10:30:41
98
1
原创 自定义绘制地图(Echarts)
需求说明:今天本来在认认真真摸鱼的时候,突然接到一个客户需求,说是做一个首页,首页里面有一个本市的地图,通过点击不同的区域的地图块,然后跳转到对应区域的办公系统。实践:虽然作为一个后端程序员,但是这个小前端还是有信心的,然后就去Echarts官网找,后来发现一个问题,因为客户需求中有明确要求7个区县,但是地图中只有6个,有一个新区是才划分出来的。那么问题来了,新区怎么划分坐标,只能根据客户提供的图片来画,关键就是怎么定义坐标。但是这并不能难道机智的我,因为精确度要求不高,所以就画一个大概,首
2020-10-21 15:09:11
1411
原创 CAS解析与用法以及ABA问题
性质:CAS全称CompareAndSwap,意为比较并交换,Compare(比较),Swap(交换)。这里涉及到JMM(Java内存模型),变量等信息都是存储在主内存中,而对变量进行操作的过程是在工作内存中进行的,所以进行操作的时候会先将主内存中的拷贝到工作内存中。这里的CAS指的就是在工作内存中,在操作修改之前保存一个快照(原值),修改完以后进行写回到主内存中,在此过程中会将刚刚在工作内存中保存的快照与主内存中的值进行比较(Compare),如果一致,则代表数据没有被修改,进行交换(Swap
2020-07-20 11:44:22
201
原创 volatile关键字特性
volatile性质:volatile是jvm提供的轻量的同步机制,其遵守可见性,有序性(禁止指令重排),但是并不遵守原子性,主要是这三个特性。可见性:根据JMM(Java内存模型 Java Memory Model)定义为主内存为工作内存,我们定义的变量存储在主内存中,线程操作的时候是在工作内存中进行操作的,而在工作内存中进行操作的变量都是从主内存进行拷贝过来的,操作完以后再写回主内存中。而这里的可见性就只指当多个线程操作同一个变量X的时候,当其中一个线程对变量X进行修改后写入主内存中,变
2020-07-15 15:32:51
505
原创 模板文件下载后乱码或异常的可能原因及解决方案
前言 前段时间写一个模块的时候,涉及到一个模板下载(有txt、excel、zip),模板文件存在resources目录下的,写完以后发现下载以后只有txt格式的模板是正常的。其他的格式的文件要么是乱码,要么就是打开异常。 发现问题 后来跟踪发现下载文件的路径被定为到了项目的classes编译目录下面,因为我设置的前置路径是通过代码获取项目的目录,然后我去编译后的classes文件夹下面找我的模板文件,发现本地打开也是乱码或是异常。通过观察发现,点击项目重新遍历的时候,下方会出现一个copy..
2020-06-03 08:44:48
2129
原创 fastjson toJavaObject转换对象部分(所有)属性无法赋值及其简单原理
发现问题:今天使用在JSONObject.toJavaObject()的时候发现字段无法赋值,因为之前没有怎么用过这个方法,借此机会看看是怎么实现的。跟踪问题:首先贴出我的json字符和对象然后我们跟踪到toJavaObject()方法内部,看到这个这里先不管,继续跟踪,最终跟踪到方法 castToJavaBean 中,看见这里有一个循环,看见循环就要注意了!!!,进入循环查看这里我们发现key值的首字母变小写了,而这里的key值是通过下面的进行获取的,获取到的就是对象中的字..
2020-05-27 14:51:58
8625
1
空空如也
sql server2012安装出错
2016-05-24
C#窗体之间的公共数据问题
2016-05-16
C#窗体怎么作为类的子类
2016-05-16
数据库中与exists相反的代码
2016-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人