JMS -- activeMQ使用

来源:互联网 发布:知乎电子书在电脑上看 编辑:程序博客网 时间:2024/06/05 15:51

jms相关的知识:http://blog.csdn.net/gaopeng0071/article/details/51790539

搭建
http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

Linux下搭建activeMQ
http://blog.csdn.net/gongqingkui/article/details/8928208

搭建

  • 下载ActiveMQ
  • 解压安装包*.tar.gz
  • 进入到bin目录下执行,./activemq start命令,也可以通过./activemq console 命令启动服务,并且输出日志在控制台上。
  • 启动成功,访问URL
    http://192.168.146.129:8161/

如图
这里写图片描述

创建一个queue name
这里写图片描述

到此,我们已经成功创建了一个消息队列。

下面我们通过程序,生产和消费

点对点事例

java代码如下:

/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq;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 :连接工厂,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://192.168.146.129: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("message1");            // 得到消息生成者【发送者】            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("发送消息:" + "ActiveMq 发送的消息" + i);            producer.send(message);        }    }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq;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://192.168.146.129: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("message1");            consumer = session.createConsumer(destination);            while (true) {                // 设置接收者接收消息的时间,为了便于测试,这里谁定为100s                TextMessage message = (TextMessage) consumer.receive();                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) {            }        }    }}

订阅者/发布者模式

发布者

/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq.publish;import java.util.Date;import javax.jms.Connection;import javax.jms.Destination;import javax.jms.MapMessage;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Publisher {    public static void main(String[] arg) {        String user = ActiveMQConnection.DEFAULT_USER;        String password = ActiveMQConnection.DEFAULT_PASSWORD;        String url = "tcp://192.168.146.129:61616";        String subject = "mq.topic";        ActiveMQConnectionFactory amcf = new ActiveMQConnectionFactory(user, password, url);        try {            Connection conn = amcf.createConnection();            conn.start();            Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);            Destination d = session.createTopic(subject);            MessageProducer producer = session.createProducer(d);            for (int i = 0; i <= 20; i++) {                MapMessage message = session.createMapMessage();                Date date = new Date();                message.setLong("count", date.getTime());                Thread.sleep(1000);                producer.send(message);                System.out.println("--发送消息:" + date);            }            session.commit();            session.close();            conn.close();        } catch (Exception e) {            e.printStackTrace();        }    }}

订阅者

/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq.publish;import java.util.Date;import javax.jms.Connection;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.Session;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class SubscriberFirst {    public static void main(String[] args) {        String user = ActiveMQConnection.DEFAULT_USER;        String password = ActiveMQConnection.DEFAULT_PASSWORD;        String url = "tcp://192.168.146.129:61616";        String subject = "mq.topic";        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(user, password, url);        Connection connection;        try {            connection = factory.createConnection();            connection.start();            final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);            Topic topic = session.createTopic(subject);            MessageConsumer consumer = session.createConsumer(topic);            consumer.setMessageListener(new MessageListener() {                public void onMessage(Message msg) {                    MapMessage message = (MapMessage) msg;                    try {                        System.out.println("--订阅者一收到消息:" + new Date(message.getLong("count")));                        session.commit();                    } catch (JMSException e) {                        e.printStackTrace();                    }                }            });        } catch (JMSException e) {            e.printStackTrace();        }    }}

分别运行main方法,奇迹就会发生^_^~~~

0 0
原创粉丝点击