diff --git a/README.md b/README.md index 6acb34b..a31b30b 100644 --- a/README.md +++ b/README.md @@ -166,12 +166,21 @@ ID示例(基于默认配置): 7.不要修改核心算法。本算法内部参数较多,逻辑较为复杂,在你尚未掌握核心逻辑时,请勿尝试修改核心代码且用于生产环境,除非通过大量细致、科学的测试验证。 -#### 自动/手动 设置 WorkerId +#### 自动注册WorkerId -1.如果Id生成服务是明确的,可在初始化时,手动设置 WorkerId。 +本算法提供一个开源的动态库(go实现),能在容器k8s环境下,通过 redis 自动注册 WorkerId。动态库提供的C接口方法有: +``` + +// 注册一个新的WorkerId +extern __declspec(dllexport) GoInt RegisterWorkerId(char* ip, GoInt port, char* password, GoInt maxWorkerId); -2.如果Id生成服务是不明确的,如容器环境:动态的、自动执行、生命周期完全自动化,可在初始化时通过Redis,自动申请 WorkerId,详见“Tools/AutoRegisterWorkerId” +// 注销WorkerId +extern __declspec(dllexport) void UnRegisterWorkerId(); +// 检查本地WorkerId是否有效 +extern __declspec(dllexport) GoUint8 ValidateLocalWorkerId(GoInt workerId); + +``` #### 其它分布式集成 diff --git a/Tools/AutoRegisterWorkerId/lib/yitidgengo.h b/Tools/AutoRegisterWorkerId/lib/yitidgengo.h new file mode 100644 index 0000000..647e9b9 --- /dev/null +++ b/Tools/AutoRegisterWorkerId/lib/yitidgengo.h @@ -0,0 +1,83 @@ +/* Code generated by cmd/cgo; DO NOT EDIT. */ + +/* package command-line-arguments */ + + +#line 1 "cgo-builtin-export-prolog" + +#include /* for ptrdiff_t below */ + +#ifndef GO_CGO_EXPORT_PROLOGUE_H +#define GO_CGO_EXPORT_PROLOGUE_H + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef struct { const char *p; ptrdiff_t n; } _GoString_; +#endif + +#endif + +/* Start of preamble from import "C" comments. */ + + + + +/* End of preamble from import "C" comments. */ + + +/* Start of boilerplate cgo prologue. */ +#line 1 "cgo-gcc-export-header-prolog" + +#ifndef GO_CGO_PROLOGUE_H +#define GO_CGO_PROLOGUE_H + +typedef signed char GoInt8; +typedef unsigned char GoUint8; +typedef short GoInt16; +typedef unsigned short GoUint16; +typedef int GoInt32; +typedef unsigned int GoUint32; +typedef long long GoInt64; +typedef unsigned long long GoUint64; +typedef GoInt64 GoInt; +typedef GoUint64 GoUint; +typedef __SIZE_TYPE__ GoUintptr; +typedef float GoFloat32; +typedef double GoFloat64; +typedef float _Complex GoComplex64; +typedef double _Complex GoComplex128; + +/* + static assertion to make sure the file is being used on architecture + at least with matching size of GoInt. +*/ +typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1]; + +#ifndef GO_CGO_GOSTRING_TYPEDEF +typedef _GoString_ GoString; +#endif +typedef void *GoMap; +typedef void *GoChan; +typedef struct { void *t; void *v; } GoInterface; +typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; + +#endif + +/* End of boilerplate cgo prologue. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +// 注册一个新的WorkerId +extern __declspec(dllexport) GoInt RegisterWorkerId(char* ip, GoInt port, char* password, GoInt maxWorkerId); + +// 注销WorkerId +extern __declspec(dllexport) void UnRegisterWorkerId(); + +// 检查本地WorkerId是否有效 +extern __declspec(dllexport) GoUint8 ValidateLocalWorkerId(GoInt workerId); + +#ifdef __cplusplus +} +#endif diff --git a/Tools/FFI for Python-Node-PHP/lib/yitidgen.dll b/Tools/FFI for Python-Node-PHP/lib/yitidgen.dll new file mode 100644 index 0000000..b3b9a92 Binary files /dev/null and b/Tools/FFI for Python-Node-PHP/lib/yitidgen.dll differ