自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除