2020年8月4日

摘要:两个回调方法:发送消息成功之后执行事务的executeLocalTransaction,回查时候调用的checkLocalTransaction。 我的思路:执行事务的时候,调用service的方法,这个方法需要用事务注解,方法参数中传入唯一id,事务方法最后判断如果id不为空,说明此时是事务消息在 阅读全文
posted @ 2020-08-04 15:17 chuliang 阅读(21) 评论(0) 推荐(0) 编辑
 

2020年7月6日

摘要:getBean(String beanName)是spring的核心方法 >doGetBean:其中transformedBeanName是处理beanName的;getSingleton是从缓存中获取已经实例化但是没有赋初始值的bean单例;getObjectForBeanInstance是当be 阅读全文
posted @ 2020-07-06 01:38 chuliang 阅读(18) 评论(0) 推荐(0) 编辑
 

2020年7月2日

摘要:理解同步工具的关键是看线程被挂起/唤醒的时机 join(): Thread类的同步方法,假设代码:Thread a = new Thread(); a.start(); a.join(); 这段代码在线程b中执行,b执行到a.join的时候,进入同步锁,无限循环中,判断a是否存活,如果a存活,调用a 阅读全文
posted @ 2020-07-02 16:23 chuliang 阅读(9) 评论(0) 推荐(0) 编辑
 

2020年6月16日

摘要:rocketMQ解决分布式事务的思路:1、a事务成功和mq收到消息保持一致。2、保证这条消息一定会被消费,从而完成b事务。时效性可能差了点,但是能达到最终的一致,优点是不会阻塞。 其中第二步保证消息一定会被消费可以看之前的博文,消费端用集群模式可以做到这一点。 下面来看怎样使得 事务a成功 和 mq 阅读全文
posted @ 2020-06-16 16:52 chuliang 阅读(39) 评论(0) 推荐(0) 编辑
 
摘要:我用的是DefaultMQPushConsumer,启动一个consumer的时候,根据之前的博文,push其实还是一次次的pullrequest。这里就有个问题:如果需要实时性很高,broker新收到一条消息之后,马上就要传递给订阅的consumer,那么consumer这边就需要不停的轮询,一次 阅读全文
posted @ 2020-06-16 15:39 chuliang 阅读(119) 评论(0) 推荐(0) 编辑
 

2020年6月12日

摘要:在selectServer的时候,如果没有对应的server,那么会抛出一个ClientException,然后被捕获,进入RxJava的next链,最后再抛出异常给调用方法,这时候就需要我们自己处理。 如果有server,第一次失败,如果没到到最大重试次数,ribbon的RxJava的调用链会自己 阅读全文
posted @ 2020-06-12 17:00 chuliang 阅读(69) 评论(0) 推荐(0) 编辑
 

2020年4月29日

摘要:messageModel有两种方式:BROADCASTING 和 CLUSTERING, 消费者收到消息也有两种消费方式:orderly和concurrently, 1、BROADCASTING模式下,所有注册的消费者都会消费,而这些消费者通常是集群部署的一个个微服务,这样就会多台机器重复消费。 2 阅读全文
posted @ 2020-04-29 16:56 chuliang 阅读(411) 评论(0) 推荐(0) 编辑
 

2020年4月23日

摘要:1、spring.jackson.*** 会配置时区 2、实体类的注解@JsonFormat也有一个时区 3、mysql连接的时候,serverTimezone也有一个时区 4、操作系统还有一个时区 5、mysql也有一个时区 流程: 1、前端传给mvc一个字符串的时候,mvc要根据"yml中jac 阅读全文
posted @ 2020-04-23 18:49 chuliang 阅读(259) 评论(0) 推荐(0) 编辑
 

2020年3月7日

摘要:先说特性:一条消息只被集群中的一个消费者消费。 之前的文章里提到在consumer启动之后,rebalanceService.start()在while循环中,每20秒doRebalance一次,doRebalance的逻辑就是去nameSrv上获取这个topic下面所有的broker+queue信 阅读全文
posted @ 2020-03-07 11:29 chuliang 阅读(88) 评论(0) 推荐(0) 编辑
 

2020年1月29日

摘要:DefaultMQPushConsumer(以push为例).start()调用mQClientFactory.start(),其中pullMessageService.start在一个循环中从pullRequestQueue中获取pullRequest,执行pullMessage方法,调用的是re 阅读全文
posted @ 2020-01-29 19:54 chuliang 阅读(82) 评论(0) 推荐(0) 编辑