C++之——批量創建消息隊列

批量創建消息隊列

接觸RabbitMQ時間並不長,在此邊學習邊記錄
話不多說,這裏是個人寫的通過將需要創建的隊列名稱放入容器,然後進行批量創建隊列的方法。

首先是初始化:

#include "amqp_tcp_socket.h"
#include "amqp.h"
#include "amqp_framing.h"
using namespace std;

bool init()
{
	bool conected = false;
	string strServerIP="";		//mq服務器地址
	int iPort=8080;				//端口
	string strHostName = "";	//主機名
	string strUser = "":		//登錄用戶名
	string strPassWord = "";	//登錄密碼
	string channelNumber = "";	//頻道數
	amqp_connection_state_t _conn;	//連接
	
	try
	{
		printf("CMQInstProcessControl 創建服務器連接開始");
		do
		{
			_conn = amqp_new_connection();  //聲明一個新的鏈接
			amqp_socket_t * socket = amqp_tcp_socket_new(_conn);
			if (!socket)
			{
				printf("amqp_tcp_socket_new 獲取無效socket");
				continue;
			}
			int status = amqp_socket_open(socket, strServerIP.c_str(), iPort);//獲取socket.
			if(status != AMQP_STATUS_OK)
			{
				printf("amqp_socket_open status異常");
				continue;
			}
			try
			{
				amqp_login(_conn, strHostName.c_str(), 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, strUser.c_str(), strPassWord.c_str());
			}
			catch(...)
			{
				printf("amqp_login 異常");
				continue;
			}
			try
			{
				amqp_channel_open(_conn, channelNumber);
				amqp_get_rpc_reply(_conn);
			}
			catch(...)
			{
				printf("amqp_channel_open 異常");
				continue;
			}
			conected = true;
		} while (!conected);
		printf(" 連接服務MQ器完成");
	}
	catch(CException &e)
	{
		printf("創建服務器連接異常,異常原因爲: %s",e.what());
	}
	catch(...)
	{
		printf("創建服務器連接異常,其他異常");
	}
	return conected;
}

然後進行批量創建隊列,並綁定exchange:


void ::queueDeclare(std::vector<std::string>* vecMQName)//將要批量創建的隊列名稱存入容器中
{
	try
	{
		printf("開始批量創建MQ");

		if(vecMQName.size()>0)
		{
			for(std::vector<std::string>::iterator itervec = vecMQName.begin(); itervec != vecMQName.end(); ++itervec)
			{
				printf("開始創建的消息隊列爲:%s",(*itervec).c_str());
				
				//聲明c
				amqp_exchange_declare(_conn, channelNumber, amqp_cstring_bytes((*itervec).c_str()), amqp_cstring_bytes("fanout"), 0, true, 0, 0, amqp_empty_table);
				//聲明隊列
				amqp_queue_declare(_conn, channelNumber, amqp_cstring_bytes((*itervec).c_str()), 0, true, 0, 0, amqp_empty_table);
				//將隊列與exchange綁定起來
				amqp_queue_bind(_conn, channelNumber, amqp_cstring_bytes((*itervec).c_str()), amqp_cstring_bytes((*itervec).c_str()),
					  amqp_cstring_bytes((*itervec).c_str()), amqp_empty_table);
			}
		}

		amqp_get_rpc_reply(_conn);

		amqp_channel_close(_conn, channelNumber, AMQP_REPLY_SUCCESS);
		amqp_connection_close(_conn, AMQP_REPLY_SUCCESS);
		amqp_destroy_connection(_conn);
		printf("批量創建MQ完成");
	}
	catch(CException &e)
	{
		printf("批量創建MQ時異常,異常原因爲:%s",e.what());
	}
	catch(...)
	{
		printf("批量創建MQ時異常,異常未知");
	}
}

main函數的調用就不必歇了吧,首先初始化,然後將需要創建的隊列放置在容器中,並調用queueDeclare方法,即可

本內容爲個人原創,僅用於學習交流!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章