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());

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值