自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(171)
  • 资源 (5)
  • 收藏
  • 关注

原创 2019年度总结

回顾20191.通过阅读《Netty 入门与实战:仿写微信 IM 即时通讯系统》、《Netty实战》、《Netty权威指南》对Netty进行了学习,并且用Netty实现了个分段下载服务器,又写了个简单的RPC项目。勉强算入门了吧。2.跟着官网教程学了ElasticSearch,给公司搭建了ELK日志环境。3.阅读《Java并发编程的艺术》《实战Java高并发程序设计》将零散的多线程知识...

2019-12-11 08:38:35 519

原创 使用Swagger测试发布的Dubbo服务之dubbo-swagger

源码地址:https://github.com/SpringStudent/dubbo-swagger源码地址:https://gitee.com/bigfacecat-zhouning/dubbo-swaggerdemo地址:https://github.com/SpringStudent/dubbo-swagger-demo

2019-12-02 21:44:33 515

原创 Netty实现分段下载文件服务器并集成现有单点登录(CAS)

在工作中有分段下载大文件的需求,年初刚学的Netty,业务接口也已经实现完了,Dubbo源码看的头冷,趁着热情使用Netty手撸一个集成了Cas的分段下载服务器。实现该服务(下文统一称为netty-file)可能会遇到的问题:1.session与session管理设计 2.怎么样集成现有Cas系统,实现单点登录和单点登出 3.单独部署一套服务还是在原有文件系统实现对于3.为了偷懒...

2019-11-07 11:23:47 1038 1

原创 像使用mongoTemplate一样玩转Sql之我的开源项目Gyjdbc

github地址:https://github.com/SpringStudent/GyJdbc目前我们公司正在使用~~~

2019-10-15 21:44:00 698

原创 2018年度总结

回顾2018年:今年是充满挑战和快速成长的一年,四月份和佳哥一起从上海来到杭州的创业公司,后端团队从最初的佳哥、我、小飞三人,到如今的六人;期间攻克的系统难题和每天挑灯夜战12小时以上的场景仍历历在目。今年对自己的总结如下:1.研究单点登录CAS5.x并成功应用,解决了子系统Session同步、Session共享、Session超时、登录互踢、统一配置管理cas-client中各服务地...

2019-05-14 11:24:37 478

原创 Swagger实现接口版本号管理

前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代版本的接口给外部使用,客户端不需要关心不相关的接口先来看张效果图下面是实现代码:定义注解ApiVersion:/** * 接口版本管理注解 * @author 周宁 * @Date 2018-08-30 11:48 */@Retention(RetentionPolicy....

2019-05-06 11:15:44 9391 10

原创 使用Elasticsearch搜索log4j日志

当一台机器已经无法支撑业务量,一般会选择将一个服务部署到多台服务器上,当服务报错时,即时定位错误将会变得麻烦,这时候可能迫切需要一个能统一查看甚至是搜索日志的平台,前一阵子学习了ElasticSearch,又碰巧看了log4j的实现,花了一天时间,笔者鼓捣出了一个日志搜索平台,使用的技术栈:ElasticSearch+Kibana+Log4j;本文将会把实现的源码和配置贴出来,供感...

2019-05-06 10:52:26 5696

原创 使用EMQ实现消息推送

为什么写这篇文章?笔者希望能为一些选择了EMQ作为消息推送服务的同学启发,并将使用EMQ过程中笔者遇到的问题暴露出来,当然也希望其他使用EMQ的同学能够给笔者更好的建议。本文的食用人群为对EMQ做过调研或者有相关实践经验的同学,如果您不属于该类,烦请移步:http://www.emqtt.com/。为什么会选择EMQ?1.部署简单;2.支持集群部署;3.官方文档全面;4.上手简单;5:...

2019-05-06 10:44:52 18993

转载 对象的创建过程

类的生命周期Java中对象的创建就是在堆上分配内存空间的过程,此处说的对象创建仅限于new关键字创建的普通Java对象,不包括数组对象的创建。对象创建过程1.检测类是否被加载当虚拟机执行到new时,会先去常量池中查找这个类的符号引用。如果能找到符号引用,说明此类已经被加载到方法区(方法区存储虚拟机已经加载的类的信息),可以继续执行;如果找不到符号引用,就会使用类加载器执行类的加载过程,类加载完成后继续执行。2.对象内存分配类加载完成以后,虚拟机就开始为对象分配内存,此时所需内存.

2020-05-28 14:17:37 336

翻译 Curator——Service Discovery

JAR包:Curator Service Discovery在Maven Central中以其独立的软件包提供:curator-x-discovery什么是Discovery Service在SOA /分布式系统中,服务需要相互查找。 即网络服务可能需要找到缓存服务,等等。DNS可以用于此目的,但是对于不断变化的服务而言,它的灵活性还远远不够。 服务发现系统提供了以下机制:可用服务的注册 查找特定服务的单个实例 服务实例更改通知Curator Service DiscoveryS

2020-05-23 21:53:37 1129

原创 Netty中ByteBuf的copy、duplicate、slice方法对比

敬请期待~

2020-04-06 22:07:24 5129

原创 RabbitMQ知识点整理汇总

RabbitMQ的工作机制:首先要知道RabbitMQ的三种角色:生产者、消费者、消息服务器生产者:消息的创建者,负责创建和推送消息到消息服务器 消费者:消息的接收方,接受消息并处理消息 消息服务器:其实RabbitMQ本身,不会产生和消费消息,相当于一个中转站,将生产者的消息路由给消费者RabbitMQ的一些角色ConnectionFactory:连接管理,应用程序或消费方与R...

2020-02-14 21:22:40 881

原创 《Redis入门指南》笔记二

本篇幅讲解Redis的进阶知识

2020-01-17 11:43:48 199

原创 《Redis入门指南》笔记一

本篇幅主要涉及Redis的配置、基础命令、四种数据类型的操作命令Redis是Remote Dictionary Server远程字典服务器的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。到目前为止Redis支持的键值数据类型如下1.字符串 2.散列类型 3.列表类型 4.集合类型 5.有序集合类型Redis命令返回值1.状态回复:状态回复(sta...

2020-01-17 09:18:44 251

原创 AtomicIntegerFieldUpdater与AtomicInteger使用引发的思考

在阅读《实战Java高并发程序设计》一书的4.4.7让普通变量也享受原子操作:AtomicIntegerFieldUpdater使用的demo代码如下:/** * @author 周宁 * @Date 2020-01-03 14:01 */public class AtomicIntegerFieldUpdaterDemo { public static class Can...

2020-01-07 19:27:58 1851

原创 ConcurrentLinkedQueue、LinkedBlockingQueue 、ArrayBlockingQueue之间的区别和联系

非阻塞队列ConcurrentLinkedQueue:可以看做是一个线程安全的LinkedList,适用于许多线程共享访问一个公共集合,是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法(即CAS算法)来实现。常用方法:boolean...

2020-01-03 17:57:25 1040

原创 Thread的suspend()、resume()与LockSupport的park()、unpark()

Thread的suspend()、resume()方法suspend()方法挂起线程、resume()方法继续执行,如果一个线程调用suspend()方法后,可以通过resume()继续线程的执行。但是jdk已将这俩方法标位@Deprecated,因为使用suspend()方法在使线程暂停但并不会释放线程占用的资源,直到对应线程调用了resume()方法。被挂起的线程才可以继续执行。从而阻塞在...

2020-01-02 17:27:58 1009

原创 《从零蛋开始学习MySQL》笔记

MySql数据类型Enum类型和SET类型假如我们有一列是性别只能填男或者女,如果使用Int或者varchar非常尴尬,我们提出了一个叫ENUM的类型,也称为枚举类型,它的格式如:ENUM('str1', 'str2', 'str3' ⋯)它表示在给定的字符串列表里选择一个。比如我们的性别一列可以定义成ENUM('男', '女')类型。这个的意思就是性别一列只能在'男'或者'女'这两个字符串之...

2019-12-30 11:45:18 917

原创 Dubbo源码学习19

本篇幅分析Dubbo接收到消费方发起的请求进行服务调用逻辑。在Dubbo源码学习18篇幅消费方发起的服务调用后,会将本次请求调用的有关参数方法、入参、附件参数attachments等信息通过网络通信框架Netty发送到服务端,在传输的过程中,服务消费方的请求有关参数会先经过Codec进行编码,服务提供者会对请求调用有关的参数通过Codec进行解码,但是这些不是我们本篇幅的重点所以直接略过。...

2019-12-10 09:28:57 216

原创 Dubbo源码学习18

服务的远程调用过程---消费方发起调用请求继Dubbo源码学习17,我们知道对于消费方发起的方法调用是通过代理对象的方法调用实现的,代理对象方法调用的入口为InvokerInvocationHandler.invoker(Object proxy, Method method, Object[] args)public class InvokerInvocationHandler...

2019-11-22 15:49:58 328

原创 Dubbo源码学习17

本篇幅分析Dubbo创建代理对象流程,我们在刚开始分析服务引用章节,提到了最终Dubbo会根据invoker使用proxyFactory创建代理对象,本篇幅主要目的就是为了分析proxyFactory.getProxy(invoker);ReferenceConfig.createProxy(Map<String,String> map)@SuppressWarnings...

2019-11-21 20:55:45 248

原创 Dubbo源码学习16

Dubbo 提供了4种负载均衡实现,分别是基于权重随机算法的 RandomLoadBalance、基于最少活跃调用数算法的 LeastActiveLoadBalance、基于 hash 一致性的 ConsistentHashLoadBalance,以及基于加权轮询算法的 RoundRobinLoadBalance。不难看出所有负载均衡类均继承自AbstractLoadBalance,A...

2019-11-21 10:58:40 195

原创 Dubbo源码学习15

本篇幅分析Dubbo的集群Cluster以及ClusterInvoker的实现。为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢...

2019-11-19 08:48:05 244

原创 Dubbo源码学习14

本篇幅主要分析DubboProtocol.refer方法创建invokerDubboProtocol.refer(Class<T> serviceType, URL url)@Override public <T> Invoker<T> refer(Class<T> serviceType, URL url) throws Rp...

2019-11-14 17:31:30 195

原创 Dubbo源码学习13

本篇幅分析Dubbo的配置规则Configurators和路由规则Routers的使用以及源码实现Configurators覆盖规则是Dubbo设计的在无需重启应用的情况下,动态调整RPC调用行为的一种能力。向注册中心写入动态配置覆盖规则。该功能通常由监控中心或治理中心的页面完成。RegistryFactory registryFactory = ExtensionLoader....

2019-11-13 18:07:42 262

原创 Dubbo源码学习12

该篇幅分析RegistryDirectory.subscribe(URL url)方法RegistryDirectory.subscribe(URL url)public void subscribe(URL url) { //consumer://169.254.22.149/com.alibaba.dubbo.study.day01.xml.service.Ech...

2019-11-12 16:39:10 662

原创 Dubbo源码学习11

引入服务的入口ReferenceBean。ReferenceBean.java除了多实现了FactoryBean接口其他的结构与ServiceBean(参考https://blog.csdn.net/qq_23536449/article/details/102639873)几乎差不多。我们知道FactoryBean是一种特殊的bean是;它是一个能生产对象的工厂Bean,它的实现...

2019-11-12 15:58:46 170

原创 EsAppender代码不当导致队列Mq队列停止消费的问题

问题出现&解决在我们的系统中对MQ消息的消费代码类似如下:private void consumer2Xxx() { EXECUTOR_SERVICE.submit(() -> { try { //mq队列监听 new xxxListener(){ ...

2019-11-11 20:24:37 324

原创 Dubbo源码学习10

RegistryProtocol.export服务导出流程:导出服务ExporterChangeableWrapper->注册服务到注册中心->订阅注册中心overrideSubscribeUrl数据;篇幅有限,本篇幅主要分析订阅override数据RegistryProtocol.export(final Invoker<T> invoker)@Overri...

2019-11-08 10:43:03 411

原创 Dubbo源码学习09

RegistryProtocol.export服务导出流程:导出服务ExporterChangeableWrapper->注册服务到注册中心->订阅注册中心overrideSubscribeUrl数据;篇幅有限,本篇幅主要分析注册服务到注册中心的实现RegistryProtocol.export(final Invoker<T> invoker)public ...

2019-11-05 10:55:11 265

原创 Dubbo源码学习08

Dubbo的网络传输层支持Netty、Mina、Grizzly类型的NIO框架;那么Dubbo是怎么屏蔽三种NIO框架底层细节实现,做到统一处理Channel的。下面我们拿Netty与Mina实现网络传输为例,来简单总结下NettyServer.java@Override protected void doOpen() throws Throwable { /...

2019-11-04 19:37:42 104

原创 Dubbo源码学习07

RegistryProtocol.export服务导出流程:导出服务ExporterChangeableWrapper->注册服务到注册中心->订阅注册中心overrideSubscribeUrl数据;篇幅有限,本篇幅主要分析导出服务ExporterChangeableWrapper源码实现RegistryProtocol.export(final Invoker<T&g...

2019-11-02 10:58:08 244

原创 Dubbo源码学习06

在doExportUrlsFor1Protocol方法中可以找到如下代码片段....此处省略 //为服务提供类(refer)生成Invoker //这里的proxyFactory为ProxyFactory$Adaptive Invoker<?> invoker = proxyFact...

2019-10-19 16:22:35 246

原创 Dubbo源码学习05

ServiceBean是暴露服务的入口ServiceBean看起来貌似很复杂的样子,其实都是纸老虎。我们分为将上述类分为如下几类 XxxAware:实现该接口的Bean均可以通过SetXxx方法,注入Xxx对象 XxxConfig:服务暴露方暴露服务需要的相关配置;这个继承关系也很有意思,类似 属性->方法->接口->服务的配置 ApplicationLis...

2019-10-19 16:21:30 194

原创 Cas记录登出日志问题排查

问题提出先上一段登出接口的代码 @Override public void logout(String tgt) throws Exception { try { //设置tgt无效 customTicketRegistry.delTGT(tgt); LoginInfo result =...

2019-10-18 11:33:20 1821 2

原创 Dubbo源码学习04

本篇幅的主要目的是通过学习dubbo对自定义标签的解析,掌握各个配置类之间的关系。比如看得懂官方文档:http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html各个配置类之间的关系Dubbo自定义标签解析的入口DubboNamespaceHandler/** * dubbo命名空间解析 * * 各个类之间的关系...

2019-10-15 21:12:21 206

原创 Dubbo源码学习03

JDK的SPI机制:spi 的全称是 service provider interface, 它是jdk内置的一种服务提供发现机制。常用于框架设计中:运行时动态为接口提供实现。SPI的使用a.创建接口PrintService.javapackage com.alibaba.dubbo.study.day02.javaspi;/** * @author 周宁 * @Da...

2019-10-15 09:39:18 225

原创 Dubbo源码学习02

Dubbo的架构provider启动时会向注册中心把自己的元数据注册上去(比如服务ip和端口号),consumer在启动时从注册中心订阅(第一次订阅会全量拉取数据)服务提供方的元数据,注册中心发生数据变更会推送给订阅的Consumer。在获取服务元数据后,Consumer可以发起RPC调用,在RPC调用前后会向监控中心上报统计信息(比如并发数和调用的接口)Dubbo的分层Ser...

2019-10-12 15:03:56 234

原创 Dubbo源码学习01

RPC框架的实现原理服务暴露方通过Socket接受到服务消费方的请求方法调用,通过反序列化解析出消费方调用的方法、参数,通过反射调用服务实现类的方法获取方法调用的结果,将调用结果使用socket回写给服务消费方。服务消费方通过动态代理透明的对服务进行调用,其中代理对象的方法调用通过socket将方法、参数相关信息写给服务暴露方,在通过socket将暴露方的调用结果回写给消费者使用Net...

2019-10-09 14:00:01 366

转载 Mongodb主从复制/副本集/分片集群介绍

前文介绍了Mongodb的安装使用:https://blog.csdn.net/qq_23536449/article/details/101419915,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集)。Mongodb一共有三种集群搭建的方式:Replica Set(副本集)、Shardi...

2019-09-27 09:18:24 258

深入理解Java虚拟机JVM高级特性与最佳实践

程序员进阶之路必读书籍,解压成功后文件为pdf格式,直接阅读嘿嘿

2018-10-28

JAVA并发编程实践

JAVA并发编程实践pdf中文版,三年以上工作经验程序员进阶神器。

2018-10-24

elastcisearch-6.3.0

elasticsearch官网最新安装包,请尽情下载吧各路大神,亲测好用

2018-06-21

nexus免安装包

nexus安装版本,要求jdk为1.7以上

2016-04-29

dubbo控制台war包

dubbo控制中心war

2016-04-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除