Exemplo n.º 1
0
void RebalanceImpl::unlockAll(bool oneway)
{
    std::map<std::string, std::set<MessageQueue> > brokerMqs = buildProcessQueueTableByBrokerName();
    std::map<std::string, std::set<MessageQueue> >::iterator it = brokerMqs.begin();

    for (; it != brokerMqs.end(); it++)
    {
        std::string brokerName = it->first;
        std::set<MessageQueue> mqs = it->second;

        if (mqs.empty())
        {
            continue;
        }

        FindBrokerResult findBrokerResult =
            m_pMQClientFactory->findBrokerAddressInSubscribe(brokerName, MixAll::MASTER_ID, true);

        if (!findBrokerResult.brokerAddr.empty())
        {
            UnlockBatchRequestBody* requestBody = new UnlockBatchRequestBody();
            requestBody->setConsumerGroup(m_consumerGroup);
            requestBody->setClientId(m_pMQClientFactory->getClientId());
            requestBody->setMqSet(mqs);

            try
            {
                m_pMQClientFactory->getMQClientAPIImpl()->unlockBatchMQ(findBrokerResult.brokerAddr,
                        requestBody, 1000, oneway);

                kpr::ScopedLock<kpr::Mutex> lock(m_processQueueTableLock);
                std::set<MessageQueue>::iterator itm = mqs.begin();
                for (; itm!=mqs.end(); itm++)
                {
                    std::map<MessageQueue, ProcessQueue*>::iterator itp = m_processQueueTable.find(*itm);
                    if (itp != m_processQueueTable.end())
                    {
                        itp->second->setLocked(false);
                        //TODO log.info("the message queue unlock OK, Group: {} {}", this.consumerGroup, mq);
                    }
                }
            }
            catch (...)
            {
                //TODO log.error("unlockBatchMQ exception, " + mqs, e);
            }
        }
    }
}
void RebalanceImpl::unlock(MessageQueue& mq, bool oneway)
{
	FindBrokerResult findBrokerResult =
		m_pMQClientFactory->findBrokerAddressInSubscribe(mq.getBrokerName(), MixAll::MASTER_ID, true);
	if (!findBrokerResult.brokerAddr.empty())
	{
		UnlockBatchRequestBody* requestBody = new UnlockBatchRequestBody();
		requestBody->setConsumerGroup(m_consumerGroup);
		requestBody->setClientId(m_pMQClientFactory->getClientId());
		requestBody->getMqSet().insert(mq);

		try
		{
			m_pMQClientFactory->getMQClientAPIImpl()->unlockBatchMQ(findBrokerResult.brokerAddr,
				requestBody, 1000, oneway);
		}
		catch (...)
		{
			//TODO log.error("unlockBatchMQ exception, " + mq, e);
		}
	}
}