1

開発者の皆様、こんにちは。

ライブラリ名.javaを使用して2つのファイルを書きたいと思いますと.JMSMessageProducerMessageConsumer

activemq-all-5.8.0.jarフォルダにとcommons-io-2.4.jarファイルを追加し、libのポート番号をActivemqから61616に変更しました61617

ファイルを使用してMessageProducer.java、にメッセージを送信しますActivemq。これについては、コードを書きましたが、正常に動作しています。見たい場合は、このリンクをクリックしてください。

ここに画像の説明を入力

Activemqからにメッセージを送りたいですMessageConsumer.java。これは アプリケーションはApache Tomcat( http://localhost:8080/ExecutableFileProcess/MessageConsumer)内にあります

メッセージを受信するとMessageConsumer、メッセージ本文をメッセージから分離し、コンソールに出力するだけです(私のテスト用です)。このために、次の2つjavaのファイルを作成しました。しかし、機能していません。

MessageConsumer.java :

 package PackageName;
 import java.io.IOException;
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.MessageListener;
 import javax.jms.Queue;
 import javax.jms.Session;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.activemq.ActiveMQConnectionFactory;
 public class MessageConsumer extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
        throws ServletException, IOException {
try {
    //creating connectionfactory object for way
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61617");
    //establishing the connection b/w this Application and Activemq
    Connection connection=connectionFactory.createConnection();
    Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Queue queue=session.createQueue("MessageTesing");
    javax.jms.MessageConsumer consumer=session.createConsumer(queue);
    //fetching queues from Activemq
    MessageListener listener = new MyListener();
    consumer.setMessageListener(listener);
    connection.start();
} catch (Exception e) {
    // TODO: handle exception
}

}
}

MyListener.java :

package PackageName;
import javax.jms.Message;
import javax.jms.MessageListener;
public class MyListener implements MessageListener {
public void onMessage(Message msg) {
    System.out.println(msg);
}
};

Queue in の宛先を構成していませんでした。Activemq consoleまた、からメッセージを送信するときに「宛先」についても言及していませんでしたMessageProducer.java

MessageConsumer.javaEclipse を使用しています。メッセージ本文をコンソールに出力するにはどうすればよいですか。

私がしようとしていることを理解していただければ幸いです。

私は初めてなのでJMSJava明確に説明できますか.これまでのところ、Google検索を使用してコードを記述しました.しかし、この問題はどこにも見つかりませんでした.

誰でも私に提案できますか。

ありがとう。

4

2 に答える 2

1

メッセージを非同期的に受信するように (MessageListenerのスレッドで ,を使用して) クライアントを作成し、メイン スレッドが終了するだけであるため、プログラムが開始して終了する可能性があります。

次のようなことを試してください:

                connection.start();

                System.out.println("Press a key to terminate");
                try {
                    System.in.read();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                System.out.println("End");

これにより、キーを押すまでプログラムを実行し続けることができます。


の本体を読み取るには、次のTextMessageようなものを使用します (これはActiveMQ hello world examplesから引用されています。

            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                System.out.println("Received: " + text);
            } else {
                System.out.println("Received: " + message);
            }
于 2013-08-08T15:31:50.380 に答える