前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 上一篇文章,讲了Dubbo的服务导出: Dubbo源码(三) - 服务导出(生产者) 本文,咱们来聊聊Dubbo的服务引用。 本文案例来自Dubbo官方Demo,路径为: dubbo/dubbo-demo/dubbo-demo-consumer/ 服务引用原理 Dubbo服务引用对象的生成,是在ReferenceBean#getObject()方法中 其生成时机有两个: 饿汉式 ReferenceBean对象继承…

2022年7月27日 0条评论 326点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程。 Dubbo的配置是通过DubboNamespaceHandler读取解析的,其中会将Dubbo服务提供者封装成ServiceBean注入Spring容器中。而服务导出就是在ServiceBean的onApplicationEvent开始的。 想了解DubboNamespaceHandler的工作原理,请自行去了解Spring自定义标签,本文略。…

2022年7月25日 0条评论 268点热度 0人点赞 王谷雨 阅读全文

前情提要 假设你已经知道Dubbo SPI的使用方式,不知道的请出门左转: Dubbo源码(一) - SPI使用 Dubbo源码地址: apache/dubbo 本文使用版本:2.6.x 测试Demo 新建SPI测试接口以及实现类 package com.javaedit.spi; import com.alibaba.dubbo.common.URL; // 定义SPI接口 @SPI public interface Robot { void sayHello(URL url); } // 自动注入演示 publ…

2022年7月20日 0条评论 189点热度 0人点赞 王谷雨 阅读全文

为什么学SPI Dubbo 的可扩展性是基于 SPI 去实现的,而且Dubbo所有的组件都是通过 SPI 机制加载。 什么是SPI SPI 全称为 (Service Provider Interface) ,是一种服务提供发现机制。可以将服务接口与服务实现分离以达到解耦可拔插、大大提升了程序可扩展性。 说人话: 一个接口有多个实现类,具体使用哪个实现类,通过SPI机制让用户来决定。也就是,定好规范,实现允许百花齐放。 举栗子: 以JDBC为例,Java提供了JDBC API用来连接 Java 编程语言和广泛的数据库…

2022年7月19日 0条评论 213点热度 1人点赞 王谷雨 阅读全文

前置条件 先了解Sharding-jdbc、Seata、Nacos这三样东西各自的作用以及单独使用时的配置。 整合代码已放在github,详细步骤章节请搭配此项目看,欢迎start 思路 如果已经做过Seata + Nacos的整合的,直接看最后的Seata结合Sharding-jdbc章节 详细步骤 Nacos + Seata服务端整合 我之前写过,不再赘述,引流:****Seata-初体验以及避坑**** 项目工程整合Seata 参考文档:seata-example nacos服务端新增配置seata.prop…

2022年7月8日 3条评论 460点热度 1人点赞 王谷雨 阅读全文

简介 sharding-jdbc案例,版本5.1.2 springboot + mybatis-plus + sharding-jdbc 项目地址:sharding-jdbc-example 模块说明 read-write 简单的读写分离 db-sharding 简单的不同表在不同库配置 tb_order表使用sharding-jdbc的雪花算法生成id tb_storage表使用mybatis-plus生成uuid db-read-write-sharding 不同表在不同库配置 + 静态读写分离 table-s…

2022年7月7日 0条评论 190点热度 0人点赞 王谷雨 阅读全文

Seata是什么 这里引用官方解释 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 环境搭建 Nacos + Seata Nacos 使用Nacos作为配置中心和注册中心 Seata支持多种配置方式(nacos、consul、apollo、etcd、zookeep、file),详看Seata官方文档 安装(Docker方式,其他方式见Nacos官方文档): 导入Naco…

2022年7月5日 0条评论 278点热度 1人点赞 王谷雨 阅读全文

前言 动机 最近在学习Netty框架,发现Netty是支持Http协议的。加上以前看过Spring-MVC的源码,就想着二者能不能结合一下,整一个简易的web框架(PS:其实不是整,是抄) 效果 项目地址:terabithia 0.3版本使用效果如下,其实就是Spring-MVC的Controller的写法 @RestController @RequestMapping(value = "/hello") public class HelloController { /** * request url:/hello…

2022年6月21日 0条评论 155点热度 2人点赞 王谷雨 阅读全文

个人读书笔记,有些地方用词不够严谨(欢迎评论指正),见谅。书籍链接 笔记是个人理解,与书籍可能有偏差,建议看书。 问题: 什么样的数据适合图数据库? 社交关系?网页数据?地图数据? mysql有没有事务重试? 更新数据时,是按行更新还是按页更新? 更新数据时,是采用copy on write还是直接修改? 第一部分 数据系统的基石 第一章:可靠性、可扩展性、可维护性 可靠性 硬件故障:机房断电、硬盘崩溃等 软件错误:数据库异常、缓存异常等 认为错误:业务bug、运维失误等 允许部分服务可不用(不影响整体系统),最后…

2022年6月16日 0条评论 248点热度 0人点赞 王谷雨 阅读全文

以下是本人在阅读《Effective Java》期间记录的笔记,未经整理。有兴趣的可以看看,有问题可以探讨。 第二章 创建和销毁对象 1. 考虑使用静态工厂方法代替构造方法 优点: 静态方法可以命名(见名知意) 单例模式(减少创建对象的开销) 可以返回当前类的子类而不是当前类 根据参数不同返回不同实现类 类不需要存在,可以反射生成(比如数据库的DriverManager) 缺点: 没有公共或受保护构造方法的类不能被子类化??? 程序员很难找到它们 2. 当构造方法参数过多时使用 builder 模式 比如4个或者以…

2022年6月16日 0条评论 374点热度 2人点赞 王谷雨 阅读全文