黑马程序员技术交流社区

标题: 【广州校区】 + 【原创】 ActiveMQ入门案例 [打印本页]

作者: leeao    时间: 2018-12-4 13:37
标题: 【广州校区】 + 【原创】 ActiveMQ入门案例
ActiveMQ
ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持 JMS(Java Message Service)1.1 和 J2EE 1.4 规范的 JMSProvider实现,尽管 JMS 规范出台已经是很久的事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。
ActiveMQ 消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。

主要特点:
1.    多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WSNotification,XMPP,AMQP
2.    完全支持 JMS1.1 和 J2EE 1.4 规范 (持久化,XA 消息,事务)
3.    对 Spring 的支持,ActiveMQ 可以很容易内嵌到使用Spring 的系统里面去
4.    通过了常见 J2EE 服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过 JCA 1.5 resource adaptors 的配置,可以让 ActiveMQ 可以自动的部署到任何兼容 J2EE 1.4 商业服务器上
5.    支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.    支持通过 JDBC 和 journal 提供高速的消息持久化
7.    从设计上保证了高性能的集群,客户端-服务器,点对点
8.    支持 Ajax
9.    支持与 Axis 的整合
10.    可以很容易得调用内嵌 JMS provider,进行测试

queue 的使用

Producer

[Java] 纯文本查看 复制代码
public class Producer {
        public static void main(String[] args) throws Exception {
                // 1. 创建 ActiveMQConnectionFactory 连接工厂,需要 ActiveMQ 的服务地址,使用的是 tcp 协议
                String brokerURL = "tcp://192.168.12.168:61616";
                ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
                // 2. 使用连接工厂创建连接
                Connection connection = factory.createConnection();
                // 3. 使用连接对象开启连接,使用 start 方法
                connection.start();
                // 4. 从连接对象里获取 session
                // 第一个参数的作用是,是否使用 JTA 分布式事务,设置为 false 不开启
                // 第二个参数是设置应答方式,如果第一个参数是 true,那么第二个参数就失效了,这里设置的应答方式是自动应答
                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                // 5. 从 session 获取消息类型 Destination(模式(队列还是订阅),对应的名称),获取 queue(名称为
                // myqueue)
                // 参数就是设置队列名称
                Queue queue = session.createQueue("myqueue");
                // 6. 从 session 中获取消息的生产者
                MessageProducer producer = session.createProducer(queue);
                // 7. 创建消息体 使用 TextMessage 类型
                TextMessage textMessage = new ActiveMQTextMessage();

                // 设置消息的内容
                textMessage.setText("你好!传智播客。");
                // 8. 使用消息的生产者发送消息
                producer.send(textMessage);
                System.out.println("【生产者】已发送消息...--- 你好!传智播客。");
                // 9. 释放资源
                producer.close();
                session.close();
                connection.close();
        }
}

Consumer
[Java] 纯文本查看 复制代码
public class Consumer {
        public static void main(String[] args) throws Exception {
        // 1. 创建 ActiveMQConnectionFactory 连接工厂,需要 ActiveMQ 的服务地址,使用的是 tcp 协议
        String brokerURL = "tcp://192.168.12.168:61616";
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
        // 2. 使用连接工厂创建连接
        Connection connection = factory.createConnection();
        // 3. 使用连接对象开启连接,使用 start 方法
        connection.start();
        // 4. 从连接对象里获取 session
        // 第一个参数的作用是,是否使用 JTA 分布式事务,设置为 false 不开启
        // 第二个参数是设置应答方式,如果第一个参数是 true,那么第二个参数就失效了,这里设置的应答方式是自动应答
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        // 5. 从 session 获取消息类型 Destination(模式(队列还是订阅),对应的名称),获取 queue(名称为 myqueue)
        // 参数就是设置队列名称
        Queue queue = session.createQueue("myqueue");
        // 6. 从 session 中获取消息的消费者
        MessageConsumer consumer = session.createConsumer(queue);
        // 7.接受消息
        while (true) {
            // 参数表示接受消息等待的时间,单位是毫秒
            Message message = consumer.receive(2000);
            // 判断消息类型是 TextMessage
            if (message instanceof TextMessage) {
            // 如果是,则进行强转
            TextMessage textMessage = (TextMessage) message;
            // 8. 消费消息,打印消息内容
            System.out.println("消费者接收到消息:" + textMessage.getText());
        }
    }
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2