- 博客(35)
- 资源 (3)
- 收藏
- 关注
原创 @RefreshScope及@Scope原理分析
截止执行LockedScopedProxyFactoryBean的setBeanFactory()里的后续代码,proxy.addAdvice(0, this),即上面添加的DelegatingIntroductionInterceptor被替换了,且将LockedScopedProxyFactoryBean自己作为拦截器。在beanFactory.getBean()的调用中,会根据bd的scope类型,利用scope的处理器获取相应的bean。接着就是反射调用target的xxmethod方法了。
2023-04-27 19:42:34 317
原创 6. nacos 之spring-cloud结合
loadBalance体系,通过nacos的api获取服务列表,维持在本地里;然后通过serverlistUpater去定时更新一下服务实例列表,默认是30s。详细细节请参考:https://blog.csdn.net/ZXH240651200/article/details/122039688
2021-12-21 18:43:48 71
原创 1. spring-cloud 之 RestTemplate与@Loadbalanced
1. restTemplate是spring实现的,基于restful风格的http请求模板。使用restTemplate可以简化请求操作的复杂性,同时规范了代码风格。2. restTemplate不加@Loadbalanced注解,会根据url去请求,需要明确域名或者ip地址,如果写的是服务名称,例如:http://SERVICE_ORDER/list, 会报错:java.net.UnknownHostException3. restTemplate加了@Loadbalanced注解,就会通过lo
2021-12-21 14:25:15 2458 1
原创 5. nacos之服务心跳
(1)client发送心跳在2. nacos之服务注册_ZXH240651200的博客-CSDN博客里面分析过,如果服务注册类型是临时节点(默认就是临时的),会启动心跳任务。com.alibaba.nacos.client.naming.NacosNamingService#registerInstance(java.lang.String, java.lang.String, com.alibaba.nacos.api.naming.pojo.Instance) public vo..
2021-12-19 14:21:34 4665
原创 4. nacos之服务发现之udp通知
目录(1)client接收udp通知(2)naming处理ack(3)naming处理ack超时(1)client接收udp通知结合前面的文章,client在服务发现的时候,每次请求的时候会传递自己的clientIp+udpPort, 并且后续会定时去再次拉取服务实例信息。naming在发现服务实例有变化的时候,会通过clientIp+udpPort反向通知client,参考:2. nacos之服务注册_ZXH240651200的博客-CSDN博客 --> (3.3 服..
2021-12-19 13:17:21 3065
原创 3. nacos之服务发现
示例代码:public class MainConsumer { private static Logger logger = LoggerFactory.getLogger(MainConsumer.class); public static void main(String[] args) throws NacosException { Properties properties = new Properties(); properties.put(
2021-12-18 17:20:49 1139
原创 2. nacos之服务注册
目录(1) 创建NamingService(2) 服务注册(3)naming处理服务注册请求(3.1)构造service实例(3.2)保存instance到service实例中(3.3)服务变化时通过udp发送通知示例代码:public class MainProvider { public static void main(String[] args) throws NacosException { Properties properties =.
2021-12-18 16:08:44 1198
原创 1. nacos 1.4.2源码构建
1. 下载源码git地址:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.克隆命令:git clone https://github.com.cnpmjs.org/alibaba/nacos.git这里切换到1.4.2分支之后。2.
2021-12-18 10:18:02 951
原创 24. rocketmq集群消费模式下,消费offset的管理
1. consumer启动时获取consumeOffset2. broker响应consumer的consumeOffset查询3. consumer消费过程中更新consumeOffset4. broker响应consume更新consumeOffset
2021-12-12 16:34:21 2665 1
原创 22. 消息过滤消费-tag过滤
目录1. consumer配置订阅消息2. consumer心跳将订阅信息发送到broker3. broker处理consumer的心跳4. 订阅配置发生变更,反向通知consumer5. consumer处理broker发来的订阅变更消息6. consumer发送pullRequest7. broker处理pullRequest8. consumer处理PullResult1. consumer配置订阅消息测试代码try { con
2021-12-07 14:04:10 2057
原创 21. rocketmq 事务消息
rocketmq的事务消息,在一些场合被用作分布式事务的解决方案,今天就来分析一下rocketmq的事务消息目录1. 事务消息流转流程1. 事务消息流转流程示例代码:public static void main(String[] args) throws MQClientException { logger.info("producer start ..."); TransactionMQProducer producer = new.
2021-12-04 20:37:49 1548
原创 16. broker如何为consumer准备数据?
前面分析了broker的消息存储,也分析了consumer消费流程,今天来深入探究一下broker是如何为consumer准备数据的
2021-12-01 19:58:57 125
原创 15. broker如何将消息信息写入comsumeQueue和indexFile文件?
前两篇文章中已经分析了rocketmq的存储结构和如下将消息写入到commitlog文件中,今天来分析如何将消息信息写入到consumeQueue和indexFile文件中消息写入到commitlog之后,后续的步骤由ReputMessageService来承接 public DefaultMessageStore(final MessageStoreConfig messageStoreConfig, final BrokerStatsManager brokerStatsManager
2021-12-01 19:51:15 230
原创 14. broker上的commitlog、consumeQueue和IndexFile文件
RocketMQ主要存储文件包括,commitLog、consumeQueue、indexFile,所有主题消息都顺序存储在一个文件中,以确保消息的顺序写;同时,RocketMQ又引入了consumeQueue,每个主题包含多个消费队列,每个消费对了对应一个文件,如下图: CommitLog:消息存储文件,所有消息主题的消息都存储在CommitLog文件中。 ConsumeQueue:按topic和queueid来区分,存储了commitlog offset/msgsize/tag.
2021-12-01 18:42:42 271
原创 12. producer 如何均衡的将消息发送到broker上及故障延迟机制
查看DefaultMQProducerImpl.sendDefaultImpl()方法,private SendResult sendDefaultImpl( Message msg, final CommunicationMode communicationMode, final SendCallback sendCallback, final long timeout ) throws MQClientException, R
2021-11-30 13:59:47 531
原创 11. topic的预创建
预创建topic,是现在broker上创建好topic的相关信息,并注册到nameSrv上,producer生产消息时,直接重nameSrv中拉取topic的路由信息即可预先创建topic,需要通过rocketmq的命令:./mqadminupdateTopic通过命令,我们直接定位到源码:UpdateTopicSubCommand public void execute(final CommandLine commandLine, final Options options.
2021-11-29 13:30:02 518
原创 10. topic的自动创建流程
rocketmq在发送消息时,会先去获取topic的路由信息,如果topic是第一次发送消息,由于nameserver没有topic的路由信息,所以会再次以“TBW102”这个默认topic获取路由信息,假设broker都开启了自动创建开关,那么此时会获取所有broker的路由信息,消息的发送会根据负载算法选择其中一台Broker发送消息,消息到达broker后,发现本地没有该topic,会在创建该topic的信息塞进本地缓存中,同时会将topic路由信息注册到nameserver中,那么这样就会造成一个后
2021-11-29 13:03:08 1029
原创 9. 回头来看看RocketMq的相关理论
1.NameSrv: 无状态的注册中心,相关组件(1)KVConfigManagekey-value配置管理(2)RouteInfoManager注册Broker信息(名称,角色编号,地址,集群名)注册topic,提供topic信息(Topic名称,读写权限,队列情况)2. Broker消息存储中心,通过namesrv向外提供服务3.Producer消息生产者,通过nameSrv获取broker信息并向broker发送生产的消息4.Consuemr消费者,通过
2021-11-28 15:07:53 50
原创 7. broker响应consumer消费消息
在BrokerController.registerProcessor()中/** * PullMessageProcessor */this.remotingServer.registerProcessor(RequestCode.PULL_MESSAGE, this.pullMessageProcessor, this.pullMessageExecutor);this.pullMessageProcessor.registerConsumeMessageHook(consumeMess
2021-11-28 13:37:53 139
原创 6. consumer消费消息
测试代码public static void main(String[] args) { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ProducerGroupName"); consumer.setNamesrvAddr("127.0.0.1:9876"); consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_
2021-11-28 13:37:07 684
原创 4. producer 生产消息
测试代码 public static void main(String[] args) throws MQClientException { logger.info("producer start ..."); DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName1"); producer.setNamesrvAddr("127.0.0.1:9876");//外网
2021-11-27 20:24:58 431
原创 3. nameSrv接收broker的注册
nameSrvController中的remotingServer在start()的时候,完成了netty server的初始化,并启动监听9876端口号,在初始化的时候,设置了childHandler.childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel
2021-11-27 19:37:14 176
原创 2.broker 启动流程
测试代码 public static void main(String[] args) { System.setProperty(MixAll.ROCKETMQ_HOME_PROPERTY, System.getProperty("user.dir") + "/data/rocketmq/broker1"); System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, "127.0.0.1:9876"); Stri
2021-11-27 19:24:41 630
原创 1.namesrv启动流程
测试代码public static void main(String[] args) { System.setProperty(MixAll.ROCKETMQ_HOME_PROPERTY, System.getProperty("user.dir") + "/data/rocketmq/namesrv"); String [] myArgs = {"-c", System.getProperty("user.dir") + "/data/rocketmq/namesrv/conf/na
2021-11-27 18:55:27 132
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人