聊聊storagetapper的Lock

2021-03-01
阅读 5 分钟
1.7k
序本文主要研究一下storagetapper的LockLockstoragetapper/lock/lock.go {代码...} Lock接口定义了TryLock、TryLockShared、Lock、Refresh、Unlock、Close方法myLockstoragetapper/lock/lock.go {代码...} myLock定义了conn、connID、name、db.Addr、n、mu、isLocked属性,它使用db实现了Lock接口;其Lock、TryLock、Try...

聊聊storagetapper的server

2021-02-28
阅读 2 分钟
1.6k
storagetapper的server提供了StartHTTPServer、Shutdown方法;其init方法注册了/health,/schema,/cluster,/table,/config,/这几个url

聊聊nacos-coredns-plugin的UDPServer

2021-02-27
阅读 3 分钟
1.8k
序本文主要研究一下nacos-coredns-plugin的UDPServerUDPServernacos-coredns-plugin/nacos/udp_server.go {代码...} UDPServer定义了port、host、vipClient属性StartServernacos-coredns-plugin/nacos/udp_server.go {代码...} StartServer方法循环3次执行tryListen(),若都没有成功则exit;若成功则for循环执行handleCl...

聊聊nacos-coredns-plugin的ServerManager

2021-02-26
阅读 3 分钟
2.1k
ServerManager定义了serverList、lastRefreshTime、cursor属性;它提供了RefreshServerListIfNeed、NextServer、SetServers、GetServerList方法;其中NextServer会先执行RefreshServerListIfNeed在返回随机的server;RefreshServerListIfNeed方法会根据lastRefreshTime来判断是否需要refresh,若要refresh则重新通过os.G...

聊聊nacos-coredns-plugin的Domain

2021-02-25
阅读 2 分钟
1.7k
Domain定义了Name、Clusters、CacheMillis、LastRefMillis、Instances、Env、TTL属性;它提供了getInstances、String、SrvInstances方法;其中SrvInstances方法根据instance的权重来返回对应个数的instance

聊聊gost的DeltaCompare

2021-02-24
阅读 1 分钟
1.6k
序本文主要研究一下gost的DeltaCompareDeltaComparegost/math/compare.go {代码...} DeltaCompareFloat64及DeltaCompareFloat32对比两个float类型的差值是否小于等于指定的delta实例gost/math/compare_test.go {代码...} 小结gost的提供了DeltaCompareFloat32、DeltaCompareFloat64方法用于对比两个float类型的差值是否...

聊聊gost的HashSet

2021-02-23
阅读 2 分钟
1.6k
HashSet定义了Items属性;NewSet根据values来创建HashSet;它提供了Add、Remove、Contains、Empty、Size、Clear、Values、String方法

聊聊gost的CountWatch

2021-02-22
阅读 1 分钟
1.7k
CountWatch定义了start属性,它提供了Start、Reset、Count方法;其中Start方法判断start为初始值的时候设置为time.Now;Reset设置start为time.Now;Count计算当前时间距离start的纳秒数

聊聊gost的GenericTaskPool

2021-02-21
阅读 7 分钟
2k
GenericTaskPool接口定义了AddTask、AddTaskAlways、AddTaskBalance、Close、IsClosed接口

聊聊gost的ObjectPool

2021-02-20
阅读 2 分钟
1.7k
ObjectPool定义了New及sync.Pool属性,它提供了Get、Put方法,同时还有NewObjectPool工程方法;New是一个func,返回PoolObject;PoolObject接口定义了Reset方法

聊聊gost的Pager

2021-02-19
阅读 3 分钟
1.9k
Pager接口定义了GetOffset、GetPageSize、GetTotalPages、GetData、GetDataSize、HasNext、HasData方法

聊聊gost的GoUnterminated

2021-02-18
阅读 2 分钟
2k
GoUnterminated方法提供handle、WaitGroup、ignoreRecover、period参数,其内部使用的是GoSafely,只是catchFunc是内置的;catchFunc对于period大于0的会sleep一下,之后还是执行GoUnterminated,这样子在handle出错(panic)的时候会一直递归循环下去

聊聊gost的GoSafely

2021-02-17
阅读 3 分钟
1.7k
GoSafely接收WaitGroup、ignoreRecover、handler、catchFunc参数,其大致的模板是,首先对WaitGroup进行add(1),然后一步执行带defer的handler

聊聊dubbo-go-proxy的ZookeeperRegistryLoad

2021-02-16
阅读 3 分钟
1.9k
序本文主要研究一下dubbo-go-proxy的ZookeeperRegistryLoadLoaderdubbo-go-proxy/pkg/registry/load.go {代码...} Loader接口定义了LoadAllServices、GetCluster方法ZookeeperRegistryLoaddubbo-go-proxy/pkg/registry/zookeeper.go {代码...} ZookeeperRegistryLoad定义了zkName、client、Address、cluster属性;newZoo...

聊聊dubbo-go-proxy的ConsulRegistryLoad

2021-02-15
阅读 3 分钟
2.4k
序本文主要研究一下dubbo-go-proxy的ConsulRegistryLoadLoaderdubbo-go-proxy/pkg/registry/load.go {代码...} Loader接口定义了LoadAllServices、GetCluster方法ConsulRegistryLoaddubbo-go-proxy/pkg/registry/consul.go {代码...} ConsulRegistryLoad定义了Address、client、cluster属性;newConsulRegistryLoad方法...

聊聊dubbo-go-proxy的Route

2021-02-14
阅读 4 分钟
2.1k
序本文主要研究一下dubbo-go-proxy的RouteRoutedubbo-go-proxy/pkg/router/route.go {代码...} Route定义了lock、tree、wildcardTree属性,其NewRoute方法用于创建RoutePutAPIdubbo-go-proxy/pkg/router/route.go {代码...} PutAPI方法根据lowerCasePath去查找node,若没有找到则加锁创建Node,然后放到tree中,若是path...

聊聊dubbo-go-proxy的DiscoveryService

2021-02-13
阅读 6 分钟
2.1k
discovery_service.go定义了四种DiscoveryService接口,分别是APIDiscoveryService、ListenerDiscoveryService、RouteDiscoveryService、ClusterDiscoveryService、EndpointDiscoveryService

聊聊dubbo-go-proxy的apiFilter

2021-02-12
阅读 3 分钟
2.3k
序本文主要研究一下dubbo-go-proxy的apiFilterapiFilterdubbo-go-proxy/pkg/filter/api/api.go {代码...} Init方法往extension设置了名为dgp.filters.http.api的apiFilterFuncapiFilterFuncdubbo-go-proxy/pkg/filter/api/api.go {代码...} apiFilterFunc首先通过api.EmptyApi.FindApi(url)来查找对应的api,找不到则返...

聊聊dubbo-go-proxy的jtypes

2021-02-11
阅读 4 分钟
2k
序本文主要研究一下dubbo-go-proxy的jtypesJTypeMapperdubbo-go-proxy/pkg/common/constant/jtypes.go {代码...} JTypeMapper定义了个map,key为java类型,value为golang的reflect.TypemapTypesdubbo-go-proxy/pkg/client/dubbo/mapper.go {代码...} mapTypes方法先根据jType从JTypeMapper取出对应的golang的reflect.Typ...

聊聊dubbo-go-proxy的plugins

2021-02-10
阅读 4 分钟
1.9k
dubbo-go-proxy-filter@v0.1.0-rc1.0.20210120132524-c63f4eb13725/pkg/api/config/api_config.go

聊聊dubbo-go-proxy的hostFilter

2021-02-09
阅读 1 分钟
1.8k
序本文主要研究一下dubbo-go-proxy的hostFilterhostFilterdubbo-go-proxy/pkg/filter/host/host.go {代码...} hostFilter的New根据host创建hostFilterDodubbo-go-proxy/pkg/filter/host/host.go {代码...} Do方法执行doHostFilter方法,该方法将f.host设置给c.Request.Host,然后执行c.Next()httpFilterdubbo-go-proxy/p...

聊聊dubbo-go-proxy的replacePathFilter

2021-02-08
阅读 2 分钟
1.7k
replacePathFilter定义了path属性;它实现了Filter的Do方法,该方法执行的是doReplacePathFilter方法,它会往header写入名为ReplacedPathHeader,若req.URL.RawPath为空则取req.URL.Path;之后将req.URL.RawPath更新为f.path,再通过url.PathUnescape(req.URL.RawPath)计算req.URL.Path,最后将req.URL.RequestURI()赋值...

聊聊dubbo-go-proxy的remoteFilter

2021-02-07
阅读 3 分钟
1.7k
clientFilter往extension注册了名为dgp.filters.remote_call的filter func;该func执行的是Do方法

聊聊dubbo-go-proxy的timeoutFilter

2021-02-06
阅读 3 分钟
2k
timeoutFilter往extension设置了名为`dgp.filters.timeout的timeoutFilterFunc,默认的timeout为1s;timeoutFilterFunc执行的是timeoutFilter的Do方法

聊聊dubbo-go-proxy的recoveryFilter

2021-02-05
阅读 1 分钟
2.1k
recoveryFilter往extension注册名为dgp.filters.recovery的recoveryFilterFunc;该func执行的是recoveryFilter的Do方法

聊聊dubbo-go-proxy的authorityFilter

2021-02-04
阅读 2 分钟
2k
authorityFilter往extension设置了名为dgp.filters.http.authority_filter的authorityFilterFunc;该func执行的是authorityFilter.Do方法

聊聊dubbo-go-proxy的loggerFilter

2021-02-03
阅读 2 分钟
1.7k
loggerFilter的Init方法往extension设置了loggerFilterFunc,该context.FilterFunc执行loggerFilter的Do方法

聊聊dubbo-go-proxy的AccessLogFilter

2021-02-02
阅读 6 分钟
1.7k
init方法通过extension.SetFilterFunc注册了名为constant.AccessLogFilter的context.FilterFunc,然后执行accessLogWriter.Write();accessLog方法返回context.FilterFunc,该func通过buildAccessLogMsg构建accessLogMsg,然后执行accessLogWriter.Writer

聊聊dubbo-go-proxy的ParamMapper

2021-02-01
阅读 5 分钟
1.8k
序本文主要研究一下dubbo-go-proxy的ParamMapperParamMapperdubbo-go-proxy/pkg/client/mapper.go {代码...} ParamMapper接口定义了Map方法headerMapperdubbo-go-proxy/pkg/client/http/mapper.go {代码...} headerMapper实现了ParamMapper接口,其Map方法提取和映射headeruriMapperdubbo-go-proxy/pkg/client/http/mapp...

聊聊dubbo-go-proxy的Client

2021-01-31
阅读 4 分钟
1.6k
序本文主要研究一下dubbo-go-proxy的ClientClientdubbo-go-proxy/pkg/client/client.go {代码...} Client接口定义了Init、Close、Call、MapParams方法Clientdubbo-go-proxy/pkg/client/dubbo/dubbo.go {代码...} Client定义了lock、GenericServicePool属性,它实现了Client接口Initdubbo-go-proxy/pkg/client/dubbo/dubb...