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方法,即可

本内容为个人原创,仅用于学习交流!!!

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