Я занимаюсь разработкой приложения, которое использует очередь EMS Tibco с эксклюзивным набором свойств.Я смогу запустить несколько экземпляров своего приложения в активном и ждущем режиме.Когда приложение находится в режиме ожидания, оно не должно создавать потребителя в исключительной очереди.
Я реализовал приведенное ниже решение, но ищу лучший способ сделать это?
В настоящее время используюtibemsQueueInfo_GetReceiverCount (), чтобы получить количество получателей.Но этот API дает всем потребителям, созданным для очереди, и перед этим мне нужно вызвать еще 2 API.
Существует ли один API, который бы просто возвращал, что очередь имеет активного потребителя?
status = tibemsAdmin_Create(&admin, server, userName, password, sslParams);
if (status != TIBEMS_OK)
{
baseUtils_print("tibemsAdmin_Create create failed: %s\n", tibemsStatus_GetText(status));
exit(1);
}
baseUtils_print("Amin creation successful\n");
status = tibemsAdmin_GetQueue(admin, &queueInfo, name);
if (status != TIBEMS_OK)
{
baseUtils_print("tibemsAdmin_GetQueue create failed: %s\n", tibemsStatus_GetText(status));
exit(1);
}
baseUtils_print("Admin GetQueue successful \n");
status = tibemsQueueInfo_GetReceiverCount(queueInfo, &receiverCount);
if (status != TIBEMS_OK)
{
baseUtils_print("tibemsQueueInfo_GetReceiverCount create failed: %s\n", tibemsStatus_GetText(status));
exit(1);
}
baseUtils_print("Queue: '%s', Active Consumers = '%d'\n",name, receiverCount);
bool flag = true;
int prevCount = 0;
while(receiverCount)
{
prevCount = receiverCount;
if(flag)
{
cout << "Consumer in Standby mode..."<<endl;
flag = false;;
}
std::this_thread::sleep_for(std::chrono::seconds(3));
status = tibemsAdmin_GetQueue(admin, &queueInfo, name);
if (status != TIBEMS_OK)
{
baseUtils_print("tibemsAdmin_GetQueue create failed: %s\n", tibemsStatus_GetText(status));
exit(1);
}
status = tibemsQueueInfo_GetReceiverCount(queueInfo, &receiverCount);
if (status != TIBEMS_OK)
{
baseUtils_print("tibemsQueueInfo_GetReceiverCount create failed: %s\n", tibemsStatus_GetText(status));
exit(1);
}
if(receiverCount != prevCount)
cout << "current receiver count = "<<receiverCount<<endl;
}
cout << "Consumer mode is Active"<<endl;
status = tibemsSession_CreateConsumer(session,
&msgConsumer,destination,NULL,TIBEMS_FALSE);
if (status != TIBEMS_OK)
{
fail("Error creating tibemsMsgConsumer", errorContext);
}