javaメッセージ構造ActiveMQ入門例


1.ActiveMQをダウンロードする
公式サイトに行ってダウンロードします。
http://activemq.apache.org/
私はActiveMQ 5.8.0 Release版をダウンロードしました。
2.ActiveMQの運転
apache-activemq-5..0-bin.zipを展開し、apache-activemq-55.1\bin\activemq.batをダブルクリックしてActiveMQプログラムを実行します。
ActiveMQを起動したら、ログイン:http://localhost:8161/admin/をクリックして、Queを作成し、FirstQueと名づけます。
3.Eclipseプロジェクトを作成して実行する
java projectを作成します。ActiveMQ-5.8、libフォルダを新規作成します。
apache-activemq-5.8\libディレクトリを開く
コピー
activemq-brook er-5.8.0.jar
activemq-client-5.8.jar
geronimo-j 2 ee-manage ment_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.11.jar
sf 4 j-appi-1.66.jar
この5つのjarファイルはlibフォルダにあり、Build Path->Add to Build Path
図のような構造です
java 消息机制 ActiveMQ入门实例_第1张图片
Sender.java
package com.lm.activemq;

/**
 * @Header: Sender.java
 *    :
 * @author: lm
 * @date 2013-7-17   10:52:42
 * @Email 
 * @company  
 * @addr         
 */
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
	private static final int SEND_NUMBER = 5;

	public static void main(String[] args) {
		// ConnectionFactory :    ,JMS       
		ConnectionFactory connectionFactory; // Connection :JMS     JMS
		// Provider    
		Connection connection = null; // Session:             
		Session session; // Destination :      ;      .
		Destination destination; // MessageProducer:     
		MessageProducer producer; // TextMessage message;
		//   ConnectionFactory    ,    ActiveMq   jar
		connectionFactory = new ActiveMQConnectionFactory(
				ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
		try { //            
			connection = connectionFactory.createConnection();
			//   
			connection.start();
			//       
			session = connection.createSession(Boolean.TRUE,
					Session.AUTO_ACKNOWLEDGE);
			//   session     xingbo.xu-queue       queue,   ActiveMq console  
			destination = session.createQueue("FirstQueue");
			//        【   】
			producer = session.createProducer(destination);
			//       ,    ,        
			producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			//     ,    ,      ,      
			sendMessage(session, producer);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != connection)
					connection.close();
			} catch (Throwable ignore) {
			}
		}
	}

	public static void sendMessage(Session session, MessageProducer producer)
			throws Exception {
		for (int i = 1; i <= SEND_NUMBER; i++) {
			TextMessage message = session.createTextMessage("ActiveMq      "
					+ i);
			//          

			System.out.println("    :" + "ActiveMq      " + i);
			producer.send(message);
		}
	}
}
Receiver.java
package com.lm.activemq;

/**
 * @Header: Receiver.java
 *    :
 * @author: lm
 * @date 2013-7-17   10:52:58
 * @Email 
 * @company  
 * @addr         
 */
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver {
	public static void main(String[] args) {
		// ConnectionFactory :    ,JMS       
		ConnectionFactory connectionFactory;
		// Connection :JMS     JMS Provider    
		Connection connection = null;
		// Session:             
		Session session;
		// Destination :      ;      .
		Destination destination;
		//    ,     
		MessageConsumer consumer;
		connectionFactory = new ActiveMQConnectionFactory(
				ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
		try {
			//            
			connection = connectionFactory.createConnection();
			//   
			connection.start();
			//       
			session = connection.createSession(Boolean.FALSE,
					Session.AUTO_ACKNOWLEDGE);
			//   session     xingbo.xu-queue       queue,   ActiveMq console  
			destination = session.createQueue("FirstQueue");
			consumer = session.createConsumer(destination);
			while (true) {
				//             ,      ,     100s
				TextMessage message = (TextMessage) consumer.receive(100000);
				if (null != message) {
					System.out.println("    " + message.getText());
				} else {
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != connection)
					connection.close();
			} catch (Throwable ignore) {
			}
		}
	}
}
5.テストプロセス
先に実行します。Receiver.java
再実行:Sender.java
結果が見られます
Sender運転後:
メッセージ送信:ActiveMq送信のメッセージ1
メッセージ送信:ActiveMq送信のメッセージ2
メッセージ送信:ActiveMq送信のメッセージ3
メッセージ送信:ActiveMq送信のメッセージ4
メッセージ送信:ActiveMq送信のメッセージ5
Receiver運転後:
メッセージActiveMqから送信されたメッセージ1
メッセージActiveMqから送信されたメッセージ2
メッセージActiveMqから送信されたメッセージ3
メッセージActiveMqから送信されたメッセージ4
メッセージActiveMqから送信されたメッセージ5
違う出力内容を見たいなら、下の図のボタンをクリックしてsolieを切り替えます。
java 消息机制 ActiveMQ入门实例_第2张图片
Receiver.javaでは、receive(500000)のような時間を設定できます。以下のコードで示します。
TextMessage message = (TextMessage) consumer.receive(500000);
この時にReceiver.javaを実行すると、このReceiver.javaは500秒を実行しています。eclipseで発見できます。

赤いブロックをクリックして、手動でプログラムを停止します。
黒い髪:http://heisetoufa.iteye.com/