使用CMS的ActiveMQ多主题

使用CMS的ActiveMQ多主题,activemq,activemq-cpp,Activemq,Activemq Cpp,我试图通过为每个主题创建单独的会话,在同一个连接中创建多个主题。主题和第一个持久消费者都已成功创建,但我在创建第二个消费者时出错。代码可以完美地处理单个主题,但我需要在运行时在同一个连接中创建多个主题 下面是代码 activemq::library::ActiveMQCPP::initializeLibrary(); // create connection factory auto_ptr<ConnectionFactory> connection

我试图通过为每个主题创建单独的会话,在同一个连接中创建多个主题。主题和第一个持久消费者都已成功创建,但我在创建第二个消费者时出错。代码可以完美地处理单个主题,但我需要在运行时在同一个连接中创建多个主题

下面是代码

    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);
activemq::library::ActiveMQCPP::initializeLibrary();
//创建连接工厂
自动ptr连接工厂(connectionFactory::createCMSConnectionFactory(brokerURI));
//创建连接
连接=连接工厂->创建连接(uname、pwd、applicationId);
connection->setExceptionListener(此);
//添加传输侦听器
ActiveMQConnection*amqConnection=dynamic_cast(连接);
amqConnection->addTransportListener(此);
//创建会话
会话[0]=连接->创建会话(会话::自动确认);
会话[1]=连接->创建会话(会话::自动确认);
目的地[0]=会话[0]->createTopic(serviceTopic);
主题[0]=会话[0]->createTopic(serviceTopic);
目的地[1]=会话[1]->createTopic(serviceTopic2);
主题[1]=会话[1]->createTopic(serviceTopic2);
生产者[0]=会话[0]->createProducer(目标[0]);
生产者[1]=会话[1]->createProducer(目标[1]);
consumerDurable[1]=会话[1]->createDurableConsumer(主题[1],应用程序ID,getSelector(0),false);
consumerDurable[1]->setMessageListener(此);
consumerDurable[0]=会话[0]->createDurableConsumer(主题[0],应用程序ID,getSelector(1),false);
consumerDurable[0]->setMessageListener(此);
------------可变值--------------

applicationId=“Test123”

getSelector(0)=“CID与'Test123'不同,耐久性与'0'相似”

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

JMS规范规定,S的标识由 clientID和持久订户名称的组合。这是 因此,JMS连接的使用可以有许多不同的持久性 对不同主题的订阅或对同一主题使用不同的 选择器—但是JMS提供程序可以知道哪个消息对应哪个消息 订阅以保留它

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

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

JMS规范规定,S的标识由 clientID和持久订户名称的组合。这是 因此,JMS连接的使用可以有许多不同的持久性 对不同主题的订阅或对同一主题使用不同的 选择器—但是JMS提供程序可以知道哪个消息对应哪个消息 订阅以保留它

您需要为不同的使用者使用不同的ID