2017-02-16 7 views
0

activeMQを使用していますtcp // localhost URLはまだ静かですが、問題はありません。現在、「vm // localhost」コネクタを使用しようとしていますが、プロデューサからのメッセージの受信に問題があります。私は春のブーツを使用して、プロデューサーと消費者は異なる瓶にあります。私の消費者はヌルメッセージを受信して​​います。何か不足していますか?以下は私のコードです(apacheのWebサイトにあります)。事前に感謝ActiveMQ VMトランスポートを使用してプロデューサからのメッセージを受信して​​いません

Producer.jar

ActiveMQConnectionFactory connectionFactory = 
new ActiveMQConnectionFactory("vm://localhost"); 
Connection connection = connectionFactory.createConnection(); 
connection.start(); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
Destination destination = session.createQueue("TEST.FOO"); 
MessageProducer producer = session.createProducer(destination); 
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 

String text = "Hello world! From: " + Thread.currentThread().getName() + " : " + this.hashCode(); 
TextMessage message = session.createTextMessage(text); 

System.out.println("Sent message: " + message.hashCode() + " : " + Thread.currentThread().getName()); 
producer.send(message); 

session.close(); 
connection.close(); 

Consumer.jar

ActiveMQConnectionFactory connectionFactory = 
new ActiveMQConnectionFactory("vm://localhost"); 
Connection connection = connectionFactory.createConnection(); 
connection.start(); 

connection.setExceptionListener(this); 

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
Destination destination = session.createQueue("TEST.FOO"); 

MessageConsumer consumer = session.createConsumer(destination); 

// Wait for a message 
Message message = consumer.receive(10000); 

if (message instanceof TextMessage) { 
    TextMessage textMessage = (TextMessage) message; 
    String text = textMessage.getText(); 
    System.out.println("Received 1: " + text); 
} else { 
    System.out.println("Received 2: " + message); 
} 

consumer.close(); 
session.close(); 
connection.close(); 
+0

のための私の別の答えを参照してください、あなたは、消費者と生産を開始し、コードを投稿することができますか? プロデューサーがコンシューマーの開始前にメッセージを送信してもよろしいですか? –

+0

@HassenBennourコードはSpringBootApplication CommandLineRunnerを介して実行されています。消費者のタイムアウト時間を10秒に設定しました。それから私はその期間内に瓶を実行しています。私はもう一方の方法を試しましたが、依然としてmsgは受信されませんでした。私のプロデューサーのprintlnによると。 msgが送信されました。例外は検出されませんでした。 – totoDaryl

+0

私はコンシューマとプロデューサが異なるJarのものであるが、同じSpringBootApplicationと同じJVMの権利にあると理解していたので、 –

答えて

1

私は、VMは、VM内の輸送である、確信していました! 2つのクライアントの1つがVMトランスポートを使用する必要があり、もう1つはVMトランスポートを使用するクライアントで開始され、2つのコンポーネントを同じVMに組み込むことです。

は、同じユースケース How to send Jms message from one spring-boot application to another when both apps use embedded activemq

+0

ありがとうございます。あなたの答えはとても役に立ちます。私はテストケースでそれを実装しようとします。私のマネージャーはCプログラマーなので、ActiveMQ(JMS)はマルチティアアプリケーションには十分速いと守る必要があります。 – totoDaryl

関連する問題