批量创建消息队列
接触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方法,即可