apache-activemq(四)

     下面咱們就來說說怎麼創建發佈–訂閱消息. 發佈消息和訂閱消息其實很簡單, 基本上合創建隊列是一樣的. 不一樣的地方就是把創建的隊列的修改成創建主題就行了. 其他的都是一樣的. 這裏我會使用註冊監聽器的方式接收消息.

 創建兩個監聽器  模擬兩個用戶訂閱這個消息
package com.zero.activemq2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * 實現messageListener接口
 * 第一個監聽器
 * @author samuel
 *
 */
public class Listener1 implements MessageListener {

    /**
     * 傳輸的消息
     */
    public void onMessage(Message message) {
        try {

            if (message instanceof TextMessage) {  
                TextMessage txtMsg = (TextMessage) message;  
                String msg = txtMsg.getText();  
                System.out.println("Received__01: " + msg);  
            } else {
                System.out.println("this is error");
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

// 第二個監聽器

package com.zero.activemq2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * 實現messageListener接口
 * 第二個監聽器
 * @author samuel
 *
 */
public class Listener2 implements MessageListener {

    /**
     * 傳輸的消息
     */
    public void onMessage(Message message) {
        try {

            if (message instanceof TextMessage) {  
                TextMessage txtMsg = (TextMessage) message;  
                String msg = txtMsg.getText();  
                System.out.println("Received: __02" + msg);  
            } else {
                System.out.println("this is error");
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

    創建一個發佈者的類

package com.zero.activemq2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 發佈消息
 * @author samuel
 *
 */
public class Publisher {

    private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory;
        Connection connection;
        Session session;
        Destination destination;
        MessageProducer messageProducer;

        connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        // 創建主題
        destination = session.createTopic("firstTopic");
        messageProducer = session.createProducer(destination);
        sendMessage(session, messageProducer);
        session.commit();
        connection.close();
    }

    /**
     * 發送信息
     * @param session           JMS的Session對象
     * @param messageProducer   消息發佈者對象
     * @throws JMSException 
     */
    private static void sendMessage(Session session, MessageProducer messageProducer) throws JMSException {
        for (int i = 0; i < 10; i++) {
            TextMessage textMessage = session.createTextMessage("activemq"+i);
            System.out.println("發佈消息==>activemq" + i);
            messageProducer.send(textMessage);
        }
    }
}

     創建兩個訂閱者

// 第一個訂閱者
package com.zero.activemq2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 消費者--訂閱者1
 * @author samuel
 *
 */
public class Cusouer1 {

    private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory;
        Connection connection;
        Session session;
        Destination destination;
        MessageConsumer messageConsumer;

        connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        // 創建主題
        destination = session.createTopic("firstTopic");
        messageConsumer = session.createConsumer(destination);
        // 接收消息
        messageConsumer.setMessageListener(new Listener1());

    }
}

// 第二個訂閱者

package com.zero.activemq2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 消費者--訂閱者2
 * @author samuel
 *
 */
public class Cusouer2 {

    private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory;
        Connection connection;
        Session session;
        Destination destination;
        MessageConsumer messageConsumer;

        connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        // 創建主題
        destination = session.createTopic("firstTopic");
        messageConsumer = session.createConsumer(destination);
        // 接收消息
        messageConsumer.setMessageListener(new Listener2());

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章