ActiveMQ使用CMS的多个主题

时间:2013-01-02 14:00:49

标签: activemq activemq-cpp

我正在尝试通过为每个主题创建单独的会话来在同一连接中创建多个主题。主题和第一耐久消费者创建成功,但我在创建第二个消费者时遇到错误。代码完美适用于单个主题,但我需要在同一连接中的运行时创建多个主题

以下是代码

    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'and Durability LIKE'0'”

1 个答案:

答案 0 :(得分:1)

查看ActiveMQ上的this帮助页面。它解释了持久订阅如何针对某个主题。特别是:

  

JMS规范规定S的标识由a完成   clientID和持久订户名称的组合。这是   这样JMS连接S使用可以有许多不同的耐用性   订阅不同主题或同一主题与不同   选择器 - 但JMS提供者可以知道哪个消息   订阅以保持它。

您需要为不同的消费者使用不同的ID。