- 博客(12)
- 收藏
- 关注
原创 nsq源码之nsqlookupd执行流程
在看nsqlookupd的时候一开始发现svn包里面的东西,不知道这是什么,就再网上查了一下nsqd为了优雅的关闭退出,使用了svc包来管理程序的运行。先不用管svc,svc.run之后会执行Init和Start函数。所以我们直接从它的start方法开始看func (p *program) Start() error { opts := nsqlookupd.NewOptions()...
2019-03-27 11:11:01 511
原创 nsq之nsqd执行流程(包括订阅消息,发布消息等内容)
nsqd是就是我们平时所说的broker,接下来我们就来看一下它是怎么设计的,下面的Main方法就是nsqd启动的入口func (n *NSQD) Main() error { ctx := &context{n} exitCh := make(chan error) var once sync.Once exitFunc := func(err error) { once...
2019-03-26 20:43:37 2533
原创 nsq源码之生产者发布消息
研究完了消费者,那么我们就要看看生产者是如何工作的// Producer 生产者func Producer() { producer, err := nsq.NewProducer("127.0.0.1:4150", nsq.NewConfig()) if err != nil { fmt.Println("NewProducer", err) panic(err) } i ...
2019-03-26 15:27:25 633
原创 nsq源码之消费端消费流程
这篇博客我们先来看一下消费者消费的流程,下面就是使用一个消费者的简单demo// ConsumerHandler 消费者处理者type ConsumerHandler struct{}// HandleMessage 处理消息func (*ConsumerHandler) HandleMessage(msg *nsq.Message) error { fmt.Println(strin...
2019-03-26 14:36:25 2607 1
原创 nsq阅读概述
NSQ是Go语言编写的,开源的分布式消息队列中间件,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。最近又重新仔细学了一下Go语言,看完基础之后,想过段时间再来看Go语言的源码,但是又不想马上放下Go,于是从GitHub上找来nsq...
2019-03-26 13:06:30 159
原创 Quartz源码剖析
前些天看了Elastic-Job的实现原理,它是基于Quartz实现的,Quartz提供了定时任务的功能,现在我们就来看看Quartz底册是怎么实现的。初始化部分我们就不关注了,直接进入核心部分:scheduler.start();启动定时器public void start() throws SchedulerException { if (shuttingDown||...
2019-03-19 20:16:49 602
原创 Dubbo的SPI机制
在阅读dubbo的源码的时候,下面这行代码或者相似的代码我们会经常看到ExtensionLoader.getExtensionLoader(ConfiguratorFactory.class) .getExtension(url.getProtocol())这就是dubbo的SPI机制,这种方式我们平时也经常用,使用场景就是,我们定义了一个接口,有好多类实现了这个接口,程序在编写时我们不知道...
2019-03-16 17:36:46 636
原创 Elastic-Job之任务分片及失效分片集合转移
当定时任务需要执行的时候,在AbstractElasticJobExecutor的execute方法中会通过jobFacade的getShardingContexts()方法来获取当前服务器的分片信息public ShardingContexts getShardingContexts() { //检查时候开启失效转移 boolean isFailover = configS...
2019-03-16 16:27:26 1177
原创 Elastic-Job之几个主要的监听器
这篇博客我们来简单看几个主要的监听器的实现ElectionListenerManager 主节点选举监听管理器public void start() { addDataListener(new LeaderElectionJobListener()); addDataListener(new LeaderAbdicationJobListener());...
2019-03-16 12:24:23 1032
原创 Elastic-Job之注册作业启动信息
在JobScheduler实例化结束后的init方法中会调用schedulerFacade的registerStartUpInfo方法完成注册作业启动信息的工作,解析来我们就来看一下它工作的具体流程public void registerStartUpInfo(final boolean enabled) { //启动所有的监听器 listenerManager.startA...
2019-03-16 12:06:47 707
原创 Elastic-Job之JobScheduleController执行任务流程
在JobScheduler的init方法中我们看到,JobScheduleController被创建并且由它启动了定时任务,接下来我们就来看一下它是如何工作的。JobScheduleController jobScheduleController = new JobScheduleController( createScheduler(), createJobDe...
2019-03-16 11:38:21 1140
原创 Elastic-Job启动流程
Elastic-Job是基于quartz的一款分布式任务调度器,利用zookeeper做分布式协调,保存配置信息,分片信息,服务器实例的信息,接下来几篇博客将从源码探究一下Elastic-Job是如何实现的。这篇文章先从启动流程大体上看一下,之后会仔细分析启动过程中的具体工作。<?xml version="1.0" encoding="UTF-8"?><beans xml...
2019-03-16 11:02:42 1789
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人