天天看點

JMS的簡單使用

JMS其實用簡單的話語講就是一個管道,這個管道是用來做資料傳輸的,它有兩種方式,一種是廣播的方式,一種是點對點的方式(queue)。這裡就不對JMS做過多概念性的描述。怎麼樣簡單用起JMS呢,其實它是依賴于ActiveMq的,是以你首先得去下載下傳一個ActiveMq,然後運作在發送資訊的這端啟動acvtivemq的用戶端。 activemq是有預設的使用者名和密碼,這邊在代碼上可以有展現。廢話不多說,接下去貼一個簡單的資料生産和資料消費代碼。(queue方式)

資料的消費者方:

package com.testjms;

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 
	        ConnectionFactory connectionFactory;
	        // Connection 
	        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);
	            destination = session.createQueue("FirstQueue");
	            consumer = session.createConsumer(destination);
	            while (true) {
	                TextMessage message = (TextMessage) consumer.receive(500000);
	                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) {
	            }
	        }
	    }

}
           

資料發送方(activemq用戶端啟動方):

package com.testjms;

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 
	        ConnectionFactory connectionFactory;
	        // Connection 
	        Connection connection = null;
	        // Session
	        Session session;
	        // Destination 
	        Destination destination;
	        // MessageProducer
	        MessageProducer producer;
	        // TextMessage message;
	   
	        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);
	            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("發送方發送了" + i);
	            producer.send(message);
	        }
	    }

}