聊聊golang的Pseudo-versions

2022-05-16
阅读 2 分钟
2.3k
Pseudo-versions,中文大概是伪版本的意思,就是没有打语义版本tag(semantic version tags)的会使用伪版本

go微服务开发工具箱

2022-02-20
阅读 1 分钟
2.4k
使用golang开发了一阵子业务代码,本文主要梳理一下自己的使用感受,并总结一下常用的类库,方便查阅。由于本人是java重度使用者,不免加以对比吐槽一下,请见谅。

聊聊tunny的workerWrapper

2021-04-28
阅读 2 分钟
1.6k
workerWrapper包装了worker,定义了interruptChan、reqChan、closeChan、closedChan属性

聊聊golang的tunny

2021-04-27
阅读 4 分钟
1.7k
closureWorker定义了processor属性,它实现了Worker接口的Process、BlockUntilReady、Interrupt、Terminate方法,其中Process方法委托给processor

聊聊xxl-job-executor-go的Task

2021-04-26
阅读 1 分钟
2.4k
Run方法注册了defer在panic的时候执行callback和cancel,然后执行t.fn(t.Ext, t.Param)以及callback(200, msg)

聊聊xxl-job-executor-go

2021-04-25
阅读 5 分钟
2k
序本文主要研究一下xxl-job-executor-goExecutor {代码...} Executor定义了Init、LogHandler、RegTask、RunTask、KillTask、TaskLog、Run方法executor {代码...} executor定义了opts、address、regList、runList、mu、log、logHandler属性Init {代码...} Init方法遍历opts应用opt,然后初始化regList、runList、address...

聊聊dbsync的jobs

2021-04-23
阅读 4 分钟
1.6k
Job方法定义了ID、Error、Status、Progress、Items、Chunked、mutex、StartTime、EndTime

聊聊dbsync的Schedulable

2021-04-22
阅读 3 分钟
1.5k
Schedulable定义了URL、ID、*contract.Sync、Schedule、Status、status属性;NewSchedulableFromURL方法根据URL来创建Schedulable

聊聊dbsync的Criterion

2021-04-21
阅读 3 分钟
1.4k
序本文主要研究一下dbsync的CriterionCriterion {代码...} Criterion是一个fmt.Stringer类型between {代码...} between定义from、to两个属性lessOrEqual {代码...} lessOrEqual定义了value属性,表达式为<=greaterThan {代码...} greaterThan定义了value属性,表达式为>greaterOrEqual {代码...} greaterOrEqual定...

聊聊dddsample-core的model

2021-04-12
阅读 3 分钟
1.7k
序本文主要研究一下dddsample-core的modelEntity {代码...} Entity接口定义了sameIdentityAs方法ValueObject {代码...} ValueObject接口定义了sameValueAs方法TrackingId {代码...} TrackingId实现了ValueObject接口,sameValueAs方法通过equals方法判断Type {代码...} Type枚举实现了ValueObject接口,其sameValueAs方...

聊聊go.cqrs的EventHandler

2021-04-10
阅读 3 分钟
1.8k
EventMessage接口定义了AggregateID、GetHeaders、SetHeader、Event、EventType、Version方法

聊聊go.cqrs的Dispatcher

2021-04-09
阅读 3 分钟
1.7k
InMemoryDispatcher定义了map[string]CommandHandler属性,其Dispatch方法根据command.CommandType()获取handler,然后执行handler.Handle(command);其RegisterHandler方法遍历commands,然后获取command的type,挨个注册到map[string]CommandHandler中

聊聊go.cqrs的DomainRepository

2021-04-08
阅读 5 分钟
1.7k
GetEventStoreCommonDomainRepo定义了eventStore、eventBus、streamNameDelegate、aggregateFactory、eventFactory属性,其Load方法先通过r.aggregateFactory.GetAggregate获取aggregate,再通过r.streamNameDelegate.GetStreamName(aggregateType, id)获取streamName,然后通过r.eventStore.NewStreamReader去遍历event...

聊聊go.cqrs的AggregateRoot

2021-04-07
阅读 5 分钟
1.6k
AggregateRoot接口定义了AggregateID、OriginalVersion、CurrentVersion、IncrementVersion、Apply、TrackChange、GetChanges、ClearChanges方法

聊聊dkron的Scheduler

2021-04-06
阅读 4 分钟
2.1k
Scheduler定义了Cron、Started、EntryJobMap属性;NewScheduler方法创建默认的Scheduler;Start方法遍历jobs,挨个设置job.Agent,然后添加到Scheduler中,之后执行Scheduler.Cron.Start();Stop方法执行Scheduler.Cron.Stop();Restart方法执行Stop、ClearCron、Start方法;ClearCron设置Cron为nil

聊聊dkron的fsm

2021-04-05
阅读 4 分钟
1.6k
MessageType可以分为SetJobType、DeleteJobType、SetExecutionType、DeleteExecutionsType、ExecutionDoneType

聊聊machinery的TaskProcessor

2021-04-04
阅读 4 分钟
2.7k
Worker实现了TaskProcessor接口,其Process方法先通过worker.server.GetRegisteredTask获取taskFunc,然后通过signature更新state为RECEIVED,之后设置为STARTED,之后执行task.Call(),最后根据结果更新task为failed或者success

聊聊machinery的Lock

2021-04-03
阅读 3 分钟
1.5k
Lock定义了rclient、retries、interval属性;New方法根据cnf、addrs、db、retries创建lock;LockWithRetries方法根据retries次数来尝试r.Lock(key, unixTsToExpireNs),都没有成功则返回ErrRedisLockFailed;Lock方法执行r.rclient.SetNX,如果不成功则判断是否过期,过期的话执行执行r.rclient.GetSet,若确实过期了则...

聊聊machinery的TaskState

2021-04-02
阅读 7 分钟
1.7k
TaskState定义了PENDING、RECEIVED、STARTED、RETRY、SUCCESS、FAILURE状态;TaskState定义了TaskUUID、TaskName、State、Results、Error、CreatedAt、TTL属性;它提供了NewPendingTaskState、NewReceivedTaskState、NewStartedTaskState、NewSuccessTaskState、NewFailureTaskState、NewRetryTaskState方法来根据Signat...

聊聊eventhorizon的EventBus

2021-04-01
阅读 4 分钟
1.8k
序本文主要研究一下eventhorizon的EventBusEventBuseventhorizon/eventbus.go {代码...} EventBus接口内嵌了EventHandler接口,定义了AddHandler、Errors、Wait方法EventBuseventhorizon/eventbus/local/eventbus.go {代码...} EventBus定义了group、registered、registeredMu、errCh、wg、codec属性;HandleEvent方法先...

聊聊go-ddd-sample

2021-03-22
阅读 2 分钟
3.8k
序本文主要赏析一下go-ddd-sample项目结构 {代码...} 这里分为application、domain、infrastructure、interfaces四层domain {代码...} domain层定义了模型及repository接口,同时利用go generate生成repository的mock实现application {代码...} applicatioin层调用domain层来进行业务编排infrastructure {代码...} infra...

聊聊golang的clean architecture项目结构

2021-03-13
阅读 2 分钟
3k
clean architecture定义了四层结构,最内层是entities(enterprise business rules),再往外是use cases(application business rules),接着是interface adapters(比如controller、presenters、gateways),最外层是frameworks & drivers(比如web、ui、db、devices、external interfaces)

聊聊golang的DDD项目结构

2021-03-11
阅读 2 分钟
6.9k
比如interfaces层定义了输入层的相关方法,以使用gin提供http接口为例,这里的handler等为使用gin提供的一些http接口,这一层调用application层

聊聊dapr的Pipeline

2021-03-10
阅读 2 分钟
2k
Pipeline定义了Handlers属性,是一个Middleware数组;Pipeline定义了Apply方法,它会从后往前挨个执行Middleware函数;Middleware函数接收fasthttp.RequestHandler,返回fasthttp.RequestHandler

聊聊dapr的consistent hash

2021-03-09
阅读 4 分钟
1.9k
ConsistentHashTables定义了Version、Entries属性,Entries是个map,value为Consistent;Consistent定义了hosts、sortedSet、loadMap、totalLoad、sync.RWMutex属性

聊聊dapr的fswatcher

2021-03-08
阅读 6 分钟
1.4k
Watch方法使用fsnotify的watcher来监听文件,之后通过for循环进行select,如果监听到fsnotify.Create或者fsnotify.Write的时候判断event.Name是否包含dir,如果包含则sleep一秒然后通知eventCh

聊聊dapr的metrics_utils

2021-03-07
阅读 4 分钟
1.4k
序本文主要研究一下dapr的metrics_utilsNewMeasureViewdapr/pkg/diagnostics/utils/metrics_utils.go {代码...} NewMeasureView根据measure、tag、aggregation来创建viewWithTagsdapr/pkg/diagnostics/utils/metrics_utils.go {代码...} WithTags方法支持变长的tag.Key类型,支持将tag.Key转换为tag.MutatorAddTagKeyToC...

聊聊dapr的Limiter

2021-03-06
阅读 2 分钟
1.3k
序本文主要研究一下dapr的LimiterLimiterdapr/pkg/concurrency/limiter.go {代码...} Limiter定义了limit、tickets、numInProgress属性NewLimiterdapr/pkg/concurrency/limiter.go {代码...} NewLimiter方法根据limit来创建Limiter,并挨个分配ticketExecutedapr/pkg/concurrency/limiter.go {代码...} Execute方法首先...

聊聊storagetapper的cache

2021-03-04
阅读 2 分钟
1.5k
序本文主要研究一下storagetapper的cachecachestoragetapper/pipe/cache.go {代码...} cache是一个cacheEntry的map,cacheEntry定义了Pipe和config.PipeConfigCacheGetstoragetapper/pipe/cache.go {代码...} CacheGet方法加锁操作cache,首先通过sha256来对pipeType及db来作为cache的key,然后取出cacheEntry,若存在则...

聊聊storagetapper的pool

2021-03-03
阅读 4 分钟
1.4k
序本文主要研究一下storagetapper的poolThreadstoragetapper/pool/pool.go {代码...} Thread接口定义了Start、Adjust、Terminate、NumProcs方法poolstoragetapper/pool/pool.go {代码...} poolImpl定义了mutex、numProcs、maxNumProcs、fn属性;它实现了Thread接口,其Start方法设置了fn,同时执行Adjust方法;Adjust方...