- 博客(32)
- 收藏
- 关注
原创 dubbo:Channel
在send方法中,先调用父类的send方法检查channel是否关闭,然后调用netty channel 进行发送消息,如果是需要sent反馈的话,就获取配置的timeout 超时时间,缺省是1s,等待timeout超时时间获取发送状态,如果发送状态是false,或者出现了异常,则会抛出异常。继承了Endpoint,Endpoint表示端点的意思,客户端,服务端都可以认为是一个端点,Endpoint主要抽象了端点的关闭,发送消息,获取本端点的地址等。ChannelHandler handler来维护。
2024-01-22 19:17:41 366
原创 dubbo:传输TRANSPORTER
这是与远程通信的过程相关的,网络传输的数据必须是二进制数据,但通常调用方请求的入参有可能是对象(各种面向对象语言),而对象是不能直接在网络中传输的,所以需要把它转成可传输的二进制串,并且要求转换算法是可逆的,这个过程也就是“序列化”过程。第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton,调用的是接口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;第二层:config 层,配置层,主要是对 Dubbo 进行各种配置的,Dubbo 相关配置;
2024-01-22 19:15:27 359
原创 dubbo:异步
Provider端异步执行将阻塞的业务从Dubbo内部线程池切换到业务自定义线程,避免Dubbo线程池的过度占用,有助于避免不同服务间的互相影响。异步执行无异于节省资源或提升RPC响应性能,因为如果业务执行需要阻塞,则始终还是要有线程来负责执行。Provider 端异步执行和 Consumer 端异步调用是相互独立的,可以任意正交组合两端配置。Consumer异步 - Provider同步。Consumer同步 - Provider异步。Consumer异步 - Provider异步。
2024-01-22 19:13:45 349
原创 dubbo:服务暴露
ServiceConfig描述了对外提供的服务,ref属性引用了具体的服务实现对象,当Provider接收到Consumer发起的RPC调用时,会交给ref执行,但是Dubbo不会直接使用ref,因为不管是Provider还是Consumer,Dubbo都在向Invoker靠拢。有了Invoker就可以通过Protocol根据协议进行服务暴露,如果服务需要注册,Dubbo会改写URL协议为registry,这是个伪协议,只是在原服务暴露的基础上,增加了服务注册的功能。它可以把我们对接口的配置,
2024-01-22 19:12:11 868
原创 dubbo:深入理解Apache Dubbo与实战
服务提供者启动时,会广播自己的地址。ZooKeeper注册中心采用的是“事件通知” + “客户端拉取”的方式,客户端在第一次连接上注册中心时,会获取对应目录下全量的数据。注册中心之间保持TCP长连接,后续每个节点有任何数据变化的时候,注册中心会根据watcher的回调主动通知客户端(事件通知),客户端接到通知后,会把对应节点下的全量数据都拉取过。ZooKeeper是官方推荐的注册中心,在生产环境中有过实际使用,具体的实现在Dubbo 源码的dubbo-registry-zookeeper模块中。
2024-01-22 19:10:18 1148
原创 实例变量和局部变量
例子变量的值至少应引用一种方法、结构方法或句子块,使外部能够通过这些方法获得例子变量信息;实例变量声明在一个类别中,但除了方法、结构方法和句子之外;实例变量在对象制作时制作,在对象被破坏时破坏;一个对象实例化后,各实例变量的值得确定;实例变量可以在使用前或使用后声明;访问修饰符可修饰实例变量。
2024-01-22 19:08:26 314
原创 全局异常
格式的,但是在解析 json 的过程中,可能会有空出现,所以我们在获取某个 jsonObject 时,再通过该。Exception 异常是父类,所有异常都会继承该异常,所以我们可以直接拦截 Exception 异常,一劳永。在实际项目中,除了拦截一些系统异常外,在某些业务上,我们需要自定义一些业务异常,比如在微服。由于在业务中,有很多异常,针对不同的业务,可能给出的提示信息不同,所以为了方便项目异常信息。在构造方法中,传入我们上面自定义的异常枚举类,所以在项目中,如果有新的异常信息需要添加,我。
2024-01-22 19:07:39 336
原创 事务相关的错误
其中调用了一个refund的事务方法,其中refund方法throw了一个CommonException,initiateRefund中catch了这个Exception,此时事务回滚,全局异常处理将本次事务回滚以ApiResult.error(500,e)的形式,返回给前端,导致前台接受的不是后台设置的ApiResult.error(错误提示语),只看到e.printStackTrace中的内容。initiateRefund:是一个事务,rollbackFor = Exception.class,
2024-01-22 19:05:50 405
原创 事务相关
的场景,比如一个数据库中,针对某个用户,只有一条记录,下一个插入动作过来,会先判断该数据库。中有没有相同的用户,如果有就不插入,就更新,没有才插入,所以理论上,数据库中永远就一条同一。但是在压测时,就会出现上面的问题,数据库中确实有两条同一用户的信息,分析其原因,在于事务的。从上面方法中可以看到,方法上是加了事务的,那么也就是说,在执行该方法开始时,事务启动,执行。针对非运行时异常,如果要进行事务回滚的话,可以在。也就是说,在加锁的那部分代码执行完之后,锁释放掉了,但是事务还没结束,此时另一个线程进来。
2024-01-22 19:05:11 349
原创 深拷贝的实现方法
DynaBean :DynaBean顾名思义,它是一种可以形成动态java bean的对象,也就是说它内部会存储属性名称、类型以及对应的值,在copy属性时也是将其内部的属性名称与dest对象的属性名称对应后赋值;1、我用Apeche包下的org.apache.commons.beanutils.BeanUtils.copyProperties,如果有BigDecaimal为空的时候会报错,非内置对象为空时都会报错。标准Java Bean :这个是我们主要进行分析的类型,它是标准的JavaBean对象;
2024-01-22 17:39:12 461
原创 lambda表达式分享
Lambda的类型是从使用Lambda的上下文推断出来的。上下文(比如,接受它传递的方法的参数,或接受它的值的局部变量)中Lambda表达式需要的类型称为目标类型。因此,装箱后的值需要更多的内存,并需要额外的内存搜索来获取被包裹的原始值。1、必须有相应的函数接口(函数接口,是指内部只有一个抽象方法的接口)(这一点跟Java是强类型语言吻合)。2、Lambda表达式另一个依据是类型推断机制,在上下文信息足够的情况下,编译器可以推断出参数表的类型,而不需要显式指名。而局部变量则是保存在栈上的,是线程不共享的。
2024-01-22 17:34:32 780
原创 lambda不建议使用外部变量
这段代码中的局部变量 value 和 forEach(i -> value++) 中的 value 实际上是两个名字和值相同的变量而已,只是在 lambda 表达式中隐式创建了一个名为 value 的变量,并且将局部变量 value 的值 copy 了过去,因此它们是两个不同的"符号"。同Java 为了防止我们在 lambda 中修改其隐式创建出来的变量时,将内外的这两个同名"符号"误以为是同一个变量,就规定这种变量必须是 final 或 等效于 final 的,不能修改。
2024-01-22 17:31:33 314
原创 lambda不建议使用外部变量
这段代码中的局部变量 value 和 forEach(i -> value++) 中的 value 实际上是两个名字和值相同的变量而已,只是在 lambda 表达式中隐式创建了一个名为 value 的变量,并且将局部变量 value 的值 copy 了过去,因此它们是两个不同的"符号"。同Java 为了防止我们在 lambda 中修改其隐式创建出来的变量时,将内外的这两个同名"符号"误以为是同一个变量,就规定这种变量必须是 final 或 等效于 final 的,不能修改。
2024-01-22 17:30:11 335
原创 1月 mysql索引分享
基于这样的场景,我们可以使用B+树,B+树是对B树的优化,每个节点之间通过双向列表连接,节点中的数据通过单向链表连接,此外,由于每个树节点即磁盘块的大小是有限制的(默认16k),如果节点不存储数据就可以存储更多的键值,从而有更多的子节点,树的高度更低,例如,假设主键使用bigint类型存储,一个主键占8个字节的空间,对于3层的B+树,最多可以存储16x1024x16x1024≈2.7亿的数据,而根节点是常驻内存的,也就是说查找2.7亿数据只需要两次磁盘IO。可以把相关数据保存在一起。
2024-01-22 17:23:22 370
原创 java dubbo调用过程中,序列化会自动装箱拆箱
Java序列化过程中会自动装箱,即将基本类型转换为对应的包装类型。这是因为Java序列化需要将对象转换为字节流,而基本类型无法直接转换为字节流,需要先转换为对应的包装类型。在序列化过程中,基本类型会被自动转换为对应的包装类型,而在反序列化过程中,包装类型会被自动转换为对应的基本类型。
2023-04-26 14:29:32 76
原创 读开发手册有感
说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList 的一个视图,对。说明:如果想获取更加精确的纳秒级时间值,使用 System.nanoTime 的方式。3、判断所有集合内部的元素是否为空,使用 isEmpty()方法,而不是 size()==0 的方式。2、在日期格式中分清楚大写的 M 和小写的 m,大写的 H 和小写的 h 分别指代的意义。4) 12 小时制的则是小写的 h。3) 24 小时制的是大写的 H;
2023-02-24 14:15:38 66
原创 关于访问自己服务器显示无法访问此网站拒绝了我们的连接请求。
在重启服务器后出现不能访问服务器,先是检查自己的DNS,调整为正常再关闭自己的防火墙发现也失败。最后发现自己Nginx没有启动导致。记录自己重启服务器后应该:TomcatJenkins宝塔mysqlNginx:service nginx restart...
2020-08-16 16:40:13 8368 1
原创 linux服务器新手操作手册(自用):持续更新
1、开启防火墙systemctl start firewalld2、开放指定端口firewall-cmd --zone=public --add-port=8800/tcp --permanent3.重启防火墙firewall-cmd --reload
2020-07-25 11:00:53 277
原创 解决spring boot 启动报错问题
报错提示:Disconnected from the target VM, address: ‘127.0.0.1:10254’, transport: 'socket出现这个问题,网上有很多解决办法,错误都不一样。我的错误是在写Service时出现了两个重名方法导致错误。出现这种问题需要排错时就是,恢复到原来没有改动过可以跑的代码,再添加自己的新代码查看哪里出错。...
2020-06-08 20:03:33 318
原创 启动项目时Thymeleaf 出错
An attempt was made to call a method that does not exist. The attempt was made from the following location:Correct the classpath of your application so that it contains a single, compatible version o...
2020-03-27 11:54:08 202
原创 vue配置加出错
一、安装安装脚手架工具vue-cli全局安装vue-cliwindows在cmd输入npm install --global vue-cli创建一个基于webpack 模板的项目接着输入vue init webpack 项目名称填写配置信息Project name :项目名称Project description:项目描述Author:作者Vue build:如何构建项目...
2020-03-25 23:40:08 127
原创 Column count doesn't match value count at row 1错误解决
Column count doesn’t match value count at row 1这个错指的是insert into table_name(field1,field2…)values(value1,value2…)field和value的数量不匹配
2020-03-05 21:44:20 478
原创 springJPA出错
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' confi...
2020-03-01 15:52:20 139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人