TCPFPZKRandomProxy 是以随机访问为访问方式,与 FPZK 服务联动的 TCP 集群代理对象,是 TCPFPZKProxyCore 的子类。
namespace fpnn;
class TCPFPZKRandomProxy: public TCPFPZKProxyCore
{
public:
TCPFPZKRandomProxy(FPZKClientPtr fpzkClient, const std::string& serviceName, const std::string& cluster = "", int64_t questTimeoutSeconds = -1);
virtual ~TCPFPZKRandomProxy();
TCPClientPtr getClient(bool connect);
/**
All SendQuest():
If return false, caller must free quest & callback.
If return true, don't free quest & callback.
timeout in seconds.
*/
FPAnswerPtr sendQuest(FPQuestPtr quest, int timeout = 0);
bool sendQuest(FPQuestPtr quest, AnswerCallback* callback, int timeout = 0);
bool sendQuest(FPQuestPtr quest, std::function<void (FPAnswerPtr answer, int errorCode)> task, int timeout = 0);
};
typedef std::shared_ptr<TCPFPZKRandomProxy> TCPFPZKRandomProxyPtr;
TCPFPZKRandomProxy(FPZKClientPtr fpzkClient, const std::string& serviceName, const std::string& cluster = "", int64_t questTimeoutSeconds = -1);
参数说明
-
FPZKClientPtr fpzkClient
关联的 FPZKClient 实例。
-
const std::string& serviceName
集群名称。
-
const std::string& cluster
集群二级分组名称。
-
int64_t questTimeoutSeconds
Proxy 默认的请求超时时间。单位:秒。负值与0表示使用全局(ClientEngine)设置。
本文档仅列出基于基类所扩展的成员函数,其余成员函数请参考基类文档 TCPFPZKProxyCore 及 TCPProxyCore。
TCPClientPtr getClient(bool connect);
随机选择集群中的一个服务实例,并获取其对应的 TCPClient。
参数说明
-
bool connect
返回的 TCPClient 是否必须是处于已连接的状态。
FPAnswerPtr sendQuest(FPQuestPtr quest, int timeout = 0);
bool sendQuest(FPQuestPtr quest, AnswerCallback* callback, int timeout = 0);
bool sendQuest(FPQuestPtr quest, std::function<void (FPAnswerPtr answer, int errorCode)> task, int timeout = 0);
发送请求。
第一个声明为同步发送,后两个声明为异步发送。
参数说明
-
FPQuestPtr quest
请求数据对象。具体请参见 FPQuest。
-
int timeout
本次请求的超时设置。单位:秒。
注意
如果
timeout
为 0,表示使用 Proxy/Client 实例当前的请求超时设置。
如果 Proxy/Client 实例当前的请求超时设置为 0,则使用 ClientEngine 的请求超时设置。 -
AnswerCallback* callback
异步请求的回调对象。具体请参见 AnswerCallback。
-
std::function<void (FPAnswerPtr answer, int errorCode)> task
异步请求的回调函数。
注意
-
如果遇到连接中断/结束,连接已关闭,超时等情况,
answer
将为nullptr
。 -
当且仅当
errorCode == FPNN_EC_OK
时,answer
为业务正常应答;否则其它情况,如果answer
不为nullptr
,则为 FPNN 异常应答。FPNN 异常应答请参考 errorAnswer。
-
返回值说明
-
FPAnswerPtr
- 对于 oneway 请求,FPAnswerPtr 的返回值恒定为
nullptr
。 - 对于 twoway 请求,FPAnswerPtr 可能为正常应答,也可能为异常应答。FPNN 异常应答请参考 errorAnswer。
- 对于 oneway 请求,FPAnswerPtr 的返回值恒定为
-
bool
发送成功,返回 true;失败 返回 false。
注意
如果发送成功,
AnswerCallback* callback
将不能再被复用,用户将无须处理callback
对象的释放。SDK 会在合适的时候,调用delete
操作进行释放;
如果返回失败,用户需要处理AnswerCallback* callback
对象的释放。