nlsCppSdk/vipServerClient/vsclient.h (57 lines of code) (raw):
#ifndef VSCLIENT_H_INCLUDED
#define VSCLIENT_H_INCLUDED
#include <inttypes.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define VIPSRV_MAX_STR_LEN 64
#define VIPSRV_MAX_IP_LEN 22 // strlen(255.255.255.255:65536) and one for '\0'
#define VIPSRV_MAX_MSG_LEN 256
#define VIPSRV_MAX_DOM_LEN 128
#define VIPSRV_MAX_CLUSTERS_LEN 256
#define VIPSRV_MAX_KEY_LEN (VIPSRV_MAX_DOM_LEN + VIPSRV_MAX_CLUSTERS_LEN + 1)
typedef struct {
char ip[VIPSRV_MAX_IP_LEN];
int port;
int weight;
bool valid;
char unit[VIPSRV_MAX_STR_LEN];
char hostname[VIPSRV_MAX_STR_LEN];
char appUseType[VIPSRV_MAX_STR_LEN];
////for tengine
// int priority;
// char site[VIPSRV_MAX_STR_LEN];
// bool someSite;
} IPHost;
typedef struct {
uint32_t is_success;
char er_msg[VIPSRV_MAX_MSG_LEN]; // msg string when error occurs
char** iplist;
uint32_t ip_count;
IPHost** iplist_info; // compatible old ver
////for tengine
// char self_site[VIPSRV_MAX_STR_LEN];
} VIPSrv_Result;
typedef struct {
const char* cache_dir;
const char* jmenv_dom;
} VIPSrv_Config;
/*
下表列出了所有用于控制程序参数的环境变量及其意义和默认值,当相应环境变量不为空时,Option的对应值会被忽略
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| 环境变量名 | 意义 | 默认值
| 备注 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_C_MAX_BLOCK_TIME_MS | C客户端所有同步接口的超时时间 | 5000 |
单位毫秒 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_ALOG_CONFIGURE_FILE | 日志配置文件 | "" |
程序无需配置文件 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_LOG_LEVEL | 日志级别 | 4 |
5-DEBUG,4-INFO,3-WARN,2-ERROR,1-FATAL,0-DISABLE |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_LOG_PATH | 日志路径 | "." |
确保写权限,会创建vipclient-logs |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_PROCESS_SHARE | 共享内存开关 | 0 |
1-打开,0-关闭 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_PROCESS_SHARE_PATH | 共享内存的控制路径 |
"/tmp/.vipclient-process-share/" | 保证目录有写权限 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_MAX_CONCURRENT_REQUEST | 客户端最大并发请求数 | 1000 |
最小为10,最大为3000 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_BAD_QUERY_SPAN_SECONDS | 同一个错误域名的请求间隔时间 | 10 |
单位秒,最小值5秒,最大值5*60秒 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_CACHE_PATH | 缓存路径 | "." |
确保写权限,会创建vipclient-cache |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
| VIPCLIENT_SET_LOCAL_CACHE_FIRST | 设置是否本地缓存优先获取 | 0 | 0:
内存-->服务器---->本地缓存 | | | | | 1:
内存-->本地缓存-->服务器 |
+--------------------------------------+-------------------------------+----------------------------------+-------------------------------------------------+
"VIPCLIENT_SET_FAILOVER_PATH" 设置容灾目录,默认为程序当前工作目录 "."
"VIPCLIENT_SET_FAILOVER_BACKUP_HOUR" 设置容灾备份时间小时点,默认为凌晨3点 3
*/
// NOT threadsafe
/*
功能: 初始化客户端资源,包括定时器及router等的初始化和启动;
客户端使用前必需要调用该接口进行初始化;
参数:VIPSrv_Config:cache_dir:本地容灾文件根路径;
如:cache_dir = getenv("HOME")
当前用户目录下 VIPSrv_Config:jmenv_dom:地址服务器域名;一般为jmenv.tbsite.net
*/
extern VIPSrv_Result* vipsrv_global_init(VIPSrv_Config*);
/*********
功能:反初始化工作,客户端使用完毕后需要调用该接口,
进行资源清理回收
*********/
extern void vipsrv_global_cleanup(void);
/*****
功能:每次接口调用返回的Result使用完毕后要用vipsrv_result_deref(VIPSrv_Result*)进行销毁
参数:VIPSrv_Result*
:接口调用的返回结果的指针;记录接口调用是否与成功,以及IP地址信息
******/
extern void vipsrv_result_deref(VIPSrv_Result*);
// ThreadSafe
/*****
功能:根据域名获取一个有效ip,此ip按照RR形式动态返回
参数:domain:vipserver中的域名,对应一组ip
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
包括异步和同步接口,同步接口兼容0.3.8及以前版本
异步接口为tengine定制
*****/
extern VIPSrv_Result* vipsrv_srv_ip(const char*);
extern VIPSrv_Result* async_vipsrv_srv_ip(const char*);
/******
功能:根据域名+集群限制获取一个有效ip,此ip按照RR形式动态返回
参数:domain:vipserver中的域名,对应一组ip
Clusters:指定的虚拟集群名
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
包括异步和同步接口,同步接口兼容0.3.8及以前版本
异步接口为tengine定制
******/
extern VIPSrv_Result* vipsrv_srv_clusters_ip(const char*, const char*);
extern VIPSrv_Result* async_vipsrv_srv_clusters_ip(const char*, const char*);
/*******
功能:按对称调用机制返回dom 域名对应所有IP列表,
包括"可用"与"不可用"的IP,标记区分,若不能查找到,则返回错误
参数:domain:vipserver中的域名,对应一组ip
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
*******/
extern VIPSrv_Result* vipsrv_srv_iplist(const char*);
extern VIPSrv_Result* async_vipsrv_srv_iplist(const char*);
/******
功能:按对称调用机制返回dom 域名+集群clusters对应的所有IP列表,
包括"可用"与"不可用"的IP,标记区分,若不能查找到,则返回错误
参数:domain:vipserver中的域名,对应一组ip
Clusters:指定的虚拟集群名
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
包括异步和同步接口,同步接口兼容0.3.8及以前版本
异步接口为tengine定制
*******/
extern VIPSrv_Result* vipsrv_srv_clusters_iplist(const char*, const char*);
extern VIPSrv_Result* async_vipsrv_srv_clusters_iplist(const char*,
const char*);
/******
功能:向指定域名注册(批量)ip地址
参数:domain:指定的域名
ip_list:需要添加的IP列表;
格式: ip[:port]_weight[_cluster],例如:8.8.8.8:8080_3,128.0.0.1:80_1
token: 域名秘钥,可从登陆OPS来查看
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
*******/
extern VIPSrv_Result* vipsrv_add_ip4dom(const char*, const char*, const char*);
/******
功能: 向某个域名删除IP地址
参数: domain: 要操作的域名名称
ip_list: 需要删除的ip列表
格式: ip[:port]_weight,例如:8.8.8.8:8080_3,128.0.0.1:80_1
token: 域名秘钥,可从登陆OPS来查看
返回值: VIPSrv_Result* 记录删除是否成功
*******/
extern VIPSrv_Result* vipsrv_remv_ip4dom(const char*, const char*, const char*);
/******
功能:返回指定userId所属单元的所有IP列表,此IP列表是 dom
域名对应IP列表的一个子集返,
包括"可用"与"不可用"的IP,标记区分,若不能查找到,则返回错误
参数:domain:vipserver中的域名,对应一组ip;
userId:要查询的用户ID;
返回值:VIPSrv_Result* 记录查询是否成功,以及查询到的IP列表的具体信息
包括异步和同步接口,同步接口兼容0.3.8及以前版本
异步接口为tengine定制
*******/
extern VIPSrv_Result* vipsrv_srv_unit_hosts(const char* domain,
uint64_t userId);
extern VIPSrv_Result* async_vipsrv_srv_unit_hosts(const char* domain,
uint64_t userId);
/*******
功能:封装router接口暴露给外部
说明:这两个接口必须在vipsrv_global_init初始化化之后使用
********/
extern int getUnitByUserId(uint64_t userId, char* pUnitName);
extern int getUnitByip(char* sIp, char* pUnitName);
///*******
//功能:设置获取所有机房所有单元的IP信息
//说明:Tengine专用
//********/
// extern int setQueryFullIp(int b);
#ifdef __cplusplus
}
#endif
#endif