2013-01-02 41 views
1

我試圖通過爲每個主題創建單獨的會話在同一個連接中創建多個主題。主題和第一個耐用消費者創建成功,但我在創建第二個消費者時出錯。代碼工作完美與單一的主題,但我需要相同的連接使用CMS的ActiveMQ多主題

內創建運行時多個主題以下是代碼

activemq::library::ActiveMQCPP::initializeLibrary(); 

    // create connection factory  
    auto_ptr<ConnectionFactory> connectionFactory(ConnectionFactory::createCMSConnectionFactory(brokerURI)); 

    // create a connection 
    connection = connectionFactory->createConnection(uname,pwd,applicationId); 

    connection->setExceptionListener(this); 
    // adding transport listener 
    ActiveMQConnection* amqConnection = dynamic_cast<ActiveMQConnection*>(connection); 
    amqConnection->addTransportListener(this); 

    // create a session 
    session[0] = connection->createSession(Session::AUTO_ACKNOWLEDGE); 
    session[1] = connection->createSession(Session::AUTO_ACKNOWLEDGE); 


    destination[0] = session[0]->createTopic(serviceTopic); 
    topic[0] = session[0]->createTopic(serviceTopic); 

    destination[1] = session[1]->createTopic(serviceTopic2); 
    topic[1] = session[1]->createTopic(serviceTopic2); 

    producer[0] = session[0]->createProducer(destination[0]); 
    producer[1] = session[1]->createProducer(destination[1]); 


    consumerDurable[1] = session[1]->createDurableConsumer(topic[1], applicationId, getSelector(0), false); 
    consumerDurable[1]->setMessageListener(this); 

    consumerDurable[0] = session[0]->createDurableConsumer(topic[0], applicationId, getSelector(1), false); 
    consumerDurable[0]->setMessageListener(this); 

------------變量值 - ------------

的applicationID = 「Test123」

getSelector(0)= 「CID NOT LIKE 'Test123' 和耐久性LIKE '0'」

回答

1

乘坐看看this ActiveMQ上的幫助頁面。它解釋了持久訂閱如何針對某個主題起作用。特別是這樣的:

JMS規範要求,S的識別是通過確定clientid和持久訂戶名稱的 組合來完成。這是 ,這樣JMS連接S使用可以有不同的主題上的許多不同的持久 訂閱或具有不同 選擇器的同一主題 - 但JMS提供程序可以知道訂閱哪些郵件以保留它。

您需要爲不同的消費者使用不同的ID。