acl  3.5.3.0
disque.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include <vector>
4 #include <map>
5 #include "../stdlib/string.hpp"
6 #include "../redis/redis_command.hpp"
7 
8 #ifndef ACL_CLIENT_ONLY
9 
10 namespace acl
11 {
12 
16 class disque_cond;
17 class disque_node;
18 class disque_job;
19 
20 /**
21  * disque 命令操作类
22  */
23 class ACL_CPP_API disque : virtual public redis_command
24 {
25 public:
26  /**
27  * see redis_command::redis_command()
28  */
29  disque();
30 
31  /**
32  * see redis_command::redis_command(redis_client*)
33  */
34  disque(redis_client* conn);
35 
36  /**
37  * see redis_command::redis_command(redis_client_cluster*)
38  */
39  disque(redis_client_cluster* cluster);
40 
42  disque(redis_client_cluster* cluster, size_t max_conns);
43 
44  virtual ~disque();
45 
46  /////////////////////////////////////////////////////////////////////
47 
48  /**
49  * add a job to the specified queue
50  * 添加一个任务消息至指定的队列中
51  * @param name {const char*} the name of the specified queue
52  * 队列名称
53  * @param job {const char*} a message to deliver
54  * 任务消息字符串
55  * @param timeout {int} the command timeout in milliseconds
56  * 该命令执行的超时时间(毫秒)
57  * @param args {const std::map<acl::string, int>*} the condition
58  * for ADDJOB command, the conditions name include:
59  * REPLICATE, DELAY, RETRY, TTL, MAXLEN, ASYNC, if the args was NULL,
60  * none condition will be used in this operation
61  * 添加消息的处理条件集合,对应的条件内容项:
62  * REPLICATE -- 副本个数,
63  * DELAY -- 指定任务在放入各个节点的队列之前, 需要等待多少秒钟
64  * TTL -- 任务生存周期(秒)
65  * MAXLEN -- 指定队列最多可以存放多少个待传递的任务
66  * ASYNC -- 服务端采用异步方式将任务同步至其副本结点
67  * @return {const char*} a ID of the job will be returned, NULL will
68  * be returned if some error happened.
69  * 返回任务 ID 号,如果返回 NULL 则表示出错
70  */
71  const char* addjob(const char* name, const char* job,
72  int timeout, const std::map<string, int>* args = NULL);
73  const char* addjob(const char* name, const string& job,
74  int timeout, const std::map<string, int>* args = NULL);
75  const char* addjob(const char* name, const void* job, size_t job_len,
76  int timeout, const std::map<string, int>* args = NULL);
77 
78  /**
79  * add a job to the specified queue
80  * 向指定消息队列添加任务
81  * @param name {const char*} the name of the specified queue
82  * 指定的消息队列名称
83  * @param job {const char*} a message to deliver
84  * 将添加的任务
85  * @param timeout {int} the command timeout in milliseconds
86  * 毫秒精度的命令超时限制
87  * @param cond {const acl::disque_cond*} the condition for the ADDJOB
88  * 添加任务的条件,参见类 disque_cond
89  * @return {const char*} a ID of the job will be returned, NULL will
90  * be returned if some error happened.
91  * 返回任务 ID 号,如果返回 NULL 则表示出错
92  */
93  const char* addjob(const char* name, const char* job,
94  int timeout, const disque_cond* cond);
95  const char* addjob(const char* name, const string& job,
96  int timeout, const disque_cond* cond);
97  const char* addjob(const char* name, const void* job, size_t job_len,
98  int timeout, const disque_cond* cond);
99 
100  /**
101  * get jobs from the specified queues, or return NULL if the timeout
102  * is reached.
103  * 从指定的队列集合中获得取指定最大数量的任务
104  * @param names {const std::vector<acl::string>&} the specified queues
105  * 指定的列表名称集合
106  * @param timeout {int} the command timeout in milliseconds
107  * 毫秒精度的命令超时限制
108  * @param count {size_t} the max count of the jobs to be got
109  * 指定了返回任务结果集的最大个数限制
110  * @return {const std::vector<acl::disque_job*>*} return the jobs,
111  * or return NULL if the timeout is reached or some error happens.
112  * 返回结果集。如果超时或发生错误则返回 NULL
113  */
114  const std::vector<disque_job*>* getjob(const std::vector<string>& names,
115  size_t timeout, size_t count);
116  const std::vector<disque_job*>* getjob(const char* name,
117  size_t timeout, size_t count);
118 
119  /**
120  * acknowledge the execution of one or more jobs via IDs. The node
121  * receiving the ACK will replicate it to multiple nodes and will try
122  * to garbage collect both the job and the ACKs from the cluster so
123  * that memory can be freed.
124  * 通过给定任务 ID , 向节点告知任务已经被执行。接收到 ACK 消息的节点会将该消息
125  * 复制至多个节点, 并尝试对任务和来自集群的 ACK 消息进行垃圾回收操作, 从而释放
126  * 被占用的内存。
127  * @param job_ids {const std::vector<acl::string>&} the jobs' IDs
128  * 任务 ID 集合
129  * @return {int} return the number of IDs been ACKed, -1 will be
130  * returned if some error happened
131  * 返回被确认的任务个数,如果出错则返回 -1
132  */
133  int ackjob(const std::vector<string>& job_ids);
134 
135  /**
136  * perform a best effort cluster wide detection of the specified
137  * job IDs.
138  * 尽最大努力在集群范围内对给定的任务进行删除;在网络连接良好并且所有节点都在线时,
139  * 这个命令的效果和 ACKJOB 命令的效果一样, 但是因为这个命令引发的消息交换比
140  * ACKJOB 要少, 所以它的速度比 ACKJOB 要快不少;但是当集群中包含了失效节点的
141  * 时候, FASTACK 命令比 ACKJOB 命令更容易出现多次发送同一消息的情况
142  * @param job_ids {const std::vector<acl::string>&} the jobs' IDs
143  * 任务 ID 集合
144  * @return {int} return the number of IDs been ACKed, -1 will be
145  * returned if some error happened
146  * 返回被确认的任务个数,如果出错则返回 -1
147  */
148  int fastack(const std::vector<string>& job_ids);
149 
150  /**
151  * peek some jobs no more than the specified count from the specified
152  * queue and remain these jobs in queue.
153  * 在不取出任务的情况下, 从队列里面返回指定数量的任务
154  * @param name {const char*} the specified queue
155  * 指定的队列名称
156  * @param count {int} limit the max count of jobs to be got
157  * 限定了返回结果集的最大数量
158  * @return {const std::vector<acl::disque_job*>*} return the jobs
159  * if the queue isn't empty. NULL will be returned if the queue
160  * is empty or some error happened.
161  * 返回结果集,如果队列为空或出错则返回 NULL
162  */
163  const std::vector<disque_job*>* qpeek(const char* name, int count);
164 
165  /**
166  * get the number of jobs stored in the specified queue
167  * 获得指定队列中的任务数量
168  * @param name {const char*} the specified queue
169  * 指定的队列名称
170  * @return {int} return the number of the jobs in queue
171  * 返回指定队列中的任务数量,返回出错则返回 -1
172  */
173  int qlen(const char* name);
174 
175  /**
176  * get the stat information of the specified job by job id
177  * 根据任务 ID 获得任务的相关信息
178  * @param job_id {const char*} the id of the job
179  * 指定的任务 ID
180  * @return {const acl::disque_job*} return the job's information,
181  * return NULL if the job doesn't exist or some error happens.
182  * 返回指定任务的信息,参考类 disque_job;如果任务不存在或出错则返回 NULL
183  */
184  const disque_job* show(const char* job_id);
185 
186  /**
187  * queue jobs if not already queued
188  * 如果给定任务未被放入到队列里, 则把它们放入到队列里
189  * @param job_ids {const std::vector<acl::string>&} the job IDs
190  * 指定的任务 ID 集合
191  * @return {int} return the number of jobs been queued, -1 will be
192  * returned if some error happens.
193  * 返回被放入队列里的任务数量,如果出错则返回 -1
194  */
195  int enqueue(const std::vector<string>& job_ids);
196 
197  /**
198  * remove the jobs from the queue
199  * 从队列里面移除指定的任务
200  * @param job_ids {const std::vector<acl::string>&} the job IDs
201  * 准备移除的任务 ID 集合
202  * @return {int} return the number of jobs been removed, -1 will be
203  * returned if some error happens.
204  * 返回被移除的任务数量,如果出错则返回 -1
205  */
206  int dequeue(const std::vector<string>& job_ids);
207 
208  /**
209  * completely delete a job from a node.
210  * 在节点里面彻底地删除给定的任务。 这个命令和 FASTACK 很相似, 唯一的不同是,
211  * DELJOB 命令引发的删除操作只会在单个节点里面执行, 它不会将 DELJOB 集群总线
212  * 消息(cluster bus message)发送至其他节点
213  * @param job_ids {const std::vector<acl::string>&} the job IDs
214  * 被删除的任务 ID 集合
215  * @return {int} return the number of jobs been deleted, -1 will be
216  * returned if some error happens.
217  * 返回被删除的任务数量,如果出错则返回 -1
218  */
219  int deljob(const std::vector<string>& job_ids);
220 
221  /**
222  * display the information of the disque cluster
223  * 获得当前集群的状态信息
224  * @param out {std::map<acl::string, acl::string>&} store result
225  * 存储结果
226  * @return {bool} if the operation is successful
227  * 操作是否正常,如果出错则返回 false
228  */
229  bool info(std::map<string, string>& out);
230 
231  /**
232  * get the information of all the nodes in the cluster
233  * 获得集群中所有结点的信息
234  * @return {const std::vector<acl::disque_node*>*} all the nodes'
235  * information in the cluster, return NULL if some error happened.
236  * 返回集群中所有结点信息的结果集,如果出错则返回 NULL;参考类 disque_node
237  */
238  const std::vector<disque_node*>* hello();
239 
240 private:
241  int jobs_bat(const std::vector<string>& job_ids, const char* cmd);
242 
243 private:
244  disque_job* job_;
245  std::vector<disque_job*> jobs_;
246 
247  const std::vector<disque_job*>* get_jobs(const char* name);
248  void free_jobs();
249 
250 private:
251  int version_;
252  string myid_;
253  std::vector<disque_node*> nodes_;
254 
255  disque_node* create_node(const redis_result* rr);
256  void free_nodes();
257 };
258 
259 } // namespace acl
260 
261 #endif // ACL_CLIENT_ONLY
HTTP_API void const char * name
Definition: lib_http.h:620
#define ACL_CPP_DEPRECATED
Definition: atomic.hpp:86
class redis_client_pool disque_client_pool
Definition: disque.hpp:14
class redis_client_cluster disque_client_cluster
Definition: disque.hpp:15
#define ACL_CPP_API
class redis_client disque_client
Definition: disque.hpp:13