RabbitmqClient.hpp 4.97 KB
#pragma once

#include <string>
#include <memory>
#include <vector>

typedef void (*RABBITMQ_CALLBACK)(void* contex, const char * msg);

class CRabbitmqClient
{
/**
 * @brief not single instance;
 *
 */
public:
	static CRabbitmqClient* get_instance();
	static void destory(CRabbitmqClient *instance);


    virtual int Connect(const std::string &strHostname, int iPort, const std::string &strUser, const std::string &strPasswd, const std::string &vhost = "/") = 0;

	/**
	 * @brief Disconnect 关闭连接
	 *
	 * @return int 等于0值成功, 小于0代表错误
	 */
    virtual int Disconnect() = 0;

    /**
	*   @brief       ExchangeDeclare    声明exchange
	*	@param       [in]               strExchange
	*   @param       [in]               strType
	*   @return 等于0值代表成功创建exchange,小于0代表错误
	*/
    virtual int ExchangeDeclare(const std::string &strExchange, const std::string &strType, const bool durable = false) = 0;

    /**
	*   @brief       QueueDeclare                     声明消息队列
	*	@param       [in]               strQueueName  消息队列实例
	*   @param
	*   @return 等于0值代表成功创建queue,小于0代表错误
	*/
    virtual int QueueDeclare(const std::string &strQueueName, const bool durable = false) = 0;

    /**
	*   @brief       QueueBind                        将队列,交换机和绑定规则绑定起来形成一个路由表
	*	@param       [in]               strQueueName  消息队列
	*	@param       [in]               strExchange   交换机名称
	*	@param       [in]               strBindKey    路由名称  “msg.#” “msg.weather.**”
    *   @return 等于0值代表成功绑定,小于0代表错误
	*/
    virtual int QueueBind(const std::string &strQueueName, const std::string &strExchange, const std::string &strBindKey) = 0;

    /**
	*   @brief       QueueUnbind                      将队列,交换机和绑定规则绑定解除
	*	@param       [in]               strQueueName  消息队列
	*	@param       [in]               strExchange   交换机名称
	*	@param       [in]               strBindKey    路由名称  “msg.#” “msg.weather.**”
    *   @return 等于0值代表成功绑定,小于0代表错误
	*/
    virtual int QueueUnbind(const std::string &strQueueName, const std::string &strExchange, const std::string &strBindKey) = 0;

    /**
	*   @brief       QueueDelete                      删除消息队列。
	*	@param       [in]               strQueueName  消息队列名称
	*	@param       [in]               iIfUnused     消息队列是否在用,1 则论是否在用都删除
	*   @return 等于0值代表成功删除queue,小于0代表错误
	*/
    virtual int QueueDelete(const std::string &strQueueName, int iIfUnused) = 0;

    /**
	* @brief Publish  发布消息
	* @param [in] strMessage        消息实体
    * @param [in] strExchange       交换器
	* @param [in] strRoutekey       路由规则
    *   1.Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。
    *   2.Fanout Exchange – 不处理路由键。将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。
	*   3.Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。
    *      因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”
	* @return 等于0值代表成功发送消息实体,小于0代表发送错误
	*/
    virtual int Publish(const std::string &strMessage, const std::string &strExchange, const std::string &strRoutekey) = 0;

    /**
	* @brief consumer  消费消息
	* @param [in]  strQueueName         队列名称
	* @param [out] message_array        获取的消息实体
    * @param [int] GetNum               需要取得的消息个数
	* @param [int] timeout              取得的消息是延迟,若为NULL,表示持续取,无延迟,阻塞状态
	* @return 等于0值代表成功,小于0代表错误,错误信息从ErrorReturn返回
	*/
    virtual int Consumer_limit(const std::string &strQueueName, std::vector<std::string> &message_array, int GetNum = 1, struct timeval *timeout = NULL) = 0;

        /**
	* @brief consumer  消费消息
	* @param [in]  strQueueName         队列名称
	* @param [out] message_array        获取的消息实体
    * @param [int] GetNum               需要取得的消息个数
	* @param [int] timeout              取得的消息是延迟,若为NULL,表示持续取,无延迟,阻塞状态
	* @return 等于0值代表成功,小于0代表错误,错误信息从ErrorReturn返回
	*/
    virtual int Consumer(const std::string &strQueueName, RABBITMQ_CALLBACK callback, void * contex, struct timeval *timeout = NULL) = 0;



};