批量創建消息隊列
接觸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方法,即可