簡單的JMS實例


1.首先需要一台JMS的提供者,在這里我選擇使用的是apache-activemq-5.3.2這個服務器,首先下載服務器並通過bin目錄下的activemq.bat啟動服務器,此時可通過http://ocalhost:8161/admin/訪問服務器查看是否發布成功

2.服務器發布成功之后就可以開始寫消息發送者的程序了:

  

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 {  
  
    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"); 
            
            //Destination  destination1=session.createTopic("Second");
            //MessageProducer producer1 = session.createProducer(destination1);
            //TextMessage message1 = session.createTextMessage("我想發送給多個人的消息");
            //producer1.send(message1);
            
            // 得到消息生成者【發送者】  
            producer = session.createProducer(destination);  
            //創建需要發布的消息
            TextMessage message = session.createTextMessage("ActiveMq 發送的消息");            
            // 設置不持久化,此處學習,實際根據項目決定  
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
            //發送消息
            producer.send(message);
            session.commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != connection)  
                    connection.close();  
            } catch (Throwable ignore) {  
            }  
        }  
    }  
}  
消息發布者

3.此時消息發送者創建完畢之后就可以創建消息接受者的程序了:

  
  
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");
            //destination = session.createTopic("Second");  
            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) {  
            }  
        }  
    }  
}  
消息接收者

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM