0

現在、私のアプリケーションで実行されている組み込みブローカーがあり、同じアプリケーション内の異なるスレッドでキューを使用したいと考えています。を使用すると動作しますが、同じアプリケーションでブローカーとコンシューマーをTCP Transport使用すると使用できないことがわかりました。VM Transport(私が消費者のために別のプロセスを作成する場合に機能します)私の状況で行うより良い方法はありますか?

Springを使用したブローカー構成

<amq:broker  id="myBroker" brokerName="myBroker">       
    <amq:transportConnectors>    
        <amq:transportConnector uri="tcp://localhost:7777" />
        <amq:transportConnector uri="vm://myBroker" />
    </amq:transportConnectors>
</amq:broker>

消費者

public class TestConsumer {
    private static String brokerURL = "tcp://localhost:7777";
    private static transient ConnectionFactory factory;
    private transient Connection connection;
    private transient Session session;

    public TestConsumer() throws JMSException {
        factory = new ActiveMQConnectionFactory(brokerURL);
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    }

    public void close() throws JMSException {
        if (connection != null) {
            connection.close();
        }
    }               
    public Session getSession() {
        return session;
    }

}

リスナー

public class Listener implements MessageListener {

    public void onMessage(Message message) {
        try {
            //do something here
            System.out.println(message);
        } catch (Exception e) {
            e.printStackTrace();
        }           
    }

}

メインで

TestConsumer consumer = new TestConsumer();
Destination destination = consumer.getSession().createQueue("TESTQUEUE");
MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination);
messageConsumer.setMessageListener(new Listener());

これは、brokerURLが「tcp:localhost:7777」または「vm:// myBroker」であるが、ブローカーとコンシューマーが異なるプロセスにある場合に機能します。2つが同じアプリケーションにある場合、VMトランスポートを使用できません。

4

1 に答える 1

0

VMtrnasportを使用してみてください。私があなたを正しく理解していれば、あなたのアプリケーションはメッセージ自体を送受信します。この場合、VMトランスポートが最良の選択です。VMトランスポートはJVMを終了せず、直接API呼び出しを使用してメッセージを転送します。

詳細については、この記事を参照してください。 http://activemq.apache.org/configuring-transports.html

于 2012-10-16T10:07:52.327 に答える