1

トピックごとに個別のセッションを作成して、同じ接続内に複数のトピックを作成しようとしています。トピックと最初の耐久性のあるコンシューマーの両方が正常に作成されましたが、2 番目のコンシューマーの作成中にエラーが発生しました。コードは単一のトピックで完璧に機能しますが、実行時に同じ接続内で複数のトピックを作成する必要があります

以下はコードです

    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 は 'Test123' のようではなく、耐久性は '0' のようです"

4

1 に答える 1

1

ActiveMQ のこのヘルプ ページをご覧ください。永続的なサブスクリプションがトピックに対してどのように機能するかについて説明します。特にこれ:

JMS 仕様では、S の識別は clientID と永続サブスクライバー名の組み合わせによって行われることが規定されています。これは、S が使用する JMS 接続が、さまざまなトピックまたは同じトピックでさまざまなセレクターを使用して、さまざまな永続的なサブスクリプションを持つことができるようにするためです。ただし、JMS プロバイダーは、どのサブスクリプションのどのメッセージを保持する必要があるかを知ることができます。

コンシューマーごとに異なる ID を使用する必要があります。

于 2013-01-02T16:34:19.967 に答える