JMS--队列模式代码实现 (二)

来源:互联网 发布:js做99乘法表 编辑:程序博客网 时间:2024/06/03 20:46

      • 编程接口图
      • 代码实现
        • 准备
        • 生产者
        • 消费者

参考文档:

深入浅出JMS(三)–ActiveMQ简单的HelloWorld实例
http://blog.csdn.net/jiuqiyuliang/article/details/48608237

编程接口图
这里写图片描述

代码实现

准备

仅需添加avtivemq-all.jar
目录结构

src    jms        --JMSProsucer        --JMSConsumerLibrary    --activmq-all.jar

生产者

package jms;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class JMSProducer {    /**     * @param args     */    private static final String url=ActiveMQConnection.DEFAULT_BROKER_URL;    private static final String queueName="queue-test";    public static void main(String[] args) throws JMSException {        //1.创建ConnectionFactory        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);        //2.创建Connection        Connection connection= connectionFactory.createConnection();        //3.启动        connection.start();        //4.创建会话Session arg1:是否处理事务 arg2:自动应答        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //5.创建目标        Destination destination =session.createQueue(queueName);        //6.创建生产者        MessageProducer producer = session.createProducer(destination);        //多次向目的地发送消息        for(int i=0;i<100;i++){            //7.创建消息            TextMessage textMessage = session.createTextMessage("testMesssage "+i);            //8.生产者发布消息            producer.send(textMessage);            System.out.println("发送消息 "+textMessage.getText() );        }        //9.关闭连接        connection.close();    }}

消费者

package jms;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class JMSConsumer {    private static final String url=ActiveMQConnection.DEFAULT_BROKER_URL;    private static final String queueName="queue-test";    public static void main(String[] args) throws JMSException {        //1.创建ConnectionFactory        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);        //2.创建Connection        Connection connection= connectionFactory.createConnection();        //3.启动        connection.start();        //4.创建会话Session arg1:是否处理事务 arg2:自动应答        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //5.创建目标        Destination destination =session.createQueue(queueName);        //6.创建生产者        MessageConsumer consumer = session.createConsumer(destination);        //7.创建监听器        consumer.setMessageListener(new MessageListener() {            @Override            public void onMessage(Message mes) {                TextMessage textMessage = (TextMessage) mes;                try {                    System.out.println("接受消息 "+ textMessage.getText());                } catch (JMSException e) {                    e.printStackTrace();                }            }        });        //8.关闭连接,注意:结束的时候再关,因为要一直监听        //connection.close();    }}

http://127.0.0.1:8161可以看到web视图。
运行一次生产者和两次消费者,可以看到控制台:

INFO | Successfully connected to tcp://localhost:61616发送消息 testMesssage 0发送消息 testMesssage 1发送消息 testMesssage 2发送消息 testMesssage 3发送消息 testMesssage 4...发送消息 testMesssage 99
INFO | Successfully connected to tcp://localhost:61616接受消息 testMesssage 1接受消息 testMesssage 3接受消息 testMesssage 5...接受消息 testMesssage 99
 INFO | Successfully connected to tcp://localhost:61616接受消息 testMesssage 0接受消息 testMesssage 1接受消息 testMesssage 2...接受消息 testMesssage 98
原创粉丝点击