`
zhaomengsen
  • 浏览: 198071 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

实战Queue

    博客分类:
  • jms
阅读更多

Queue实现的是点到点模型,在下面的例子中,启动2个消费者共同监听一个Queue,然后循环给这个Queue中发送多个消息,我们依然采用ActiveMQ。

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;


public class QueueTest {

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
   
        Connection connection = factory.createConnection();
        connection.start();
       

        //创建一个Queue
        Queue queue = new ActiveMQQueue("testQueue");

        //创建一个Session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       

        //注册消费者1
        MessageConsumer comsumer1 = session.createConsumer(queue);
        comsumer1.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer1 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
       

        //注册消费者2
        MessageConsumer comsumer2 = session.createConsumer(queue);
        comsumer2.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer2 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
           
        });
       

        //创建一个生产者,然后发送多个消息。
        MessageProducer producer = session.createProducer(queue);
        for(int i=0; i<10; i++){
            producer.send(session.createTextMessage("Message:" + i));
        }
    }

}

  运行这个例子会得到下面的输出结果:

Consumer1 get Message:0
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:9

  可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。

分享到:
评论

相关推荐

    MessageQueue实战

    MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战

    RocketMQ实战与原理

    测评开始时,测评程序会启动10~20个Producer,每个Producer在一条线程中,然后每个Producer随机生产某个Topic或者附属于Queue的消息并发送到消息引擎; Topic: 消息主题。 Queue: 队列。抽象的概念,消息可以发送到...

    走进云计算Windows Azure实战手记光盘

    走进云计算:Windows Azure实战手记 朱明中 水利水电出版社 《走进云计算》是为微软Windows Azure云计算平台而编写,将带来Windows Azure平台的功能以及开发的方式等各式各样的信息,帮助您了解微软的云计算平台...

    LoadRunner性能测试工具实战视频教程【全套26集】

    LoadRunner性能测试工具实战视频教程【全套26集】 随机函数 在软件测试工具中如何巧用LoadRunner的随机函数。 LoadRunner有自带的随机函数,如果巧妙的加以采用,能解决一些看似很困难的实际问题。 一个项目的性能...

    netty-server中采用的分包拆包源码,java开发用于实战项目

    public Queue queueMessage() { return new Queue(RabbitmqConfig.message); } @Bean public Queue queueMessages() { return new Queue(RabbitmqConfig.messages); } @Bean TopicExchange exchange() { ...

    RocketMQ实战 源码解析

    消息队列(Message Queue,简称MQ)是企业级互联网架构的核心产品,服务于整个阿里巴巴集团已超过 10 年,经过阿里巴巴交易核心链路反复打磨与历年双十一购物狂欢节的严苛考验,是一个真正具备低延迟、高并发、高...

    RabbitMQ实战 高效部署分布式消息队列

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送...

    一站式掌握elastic search基础与实战视频资源-百度云链接

    11-3 -queue简介.avi 11-4 -线程简介.avi 11-5 配置简介.avi 11-6 多实例运行.avi 11-7 pipeline配置简介.avi 12-01 input插件详解及glob讲解.avi 12-02 -codec插件详解.avi 12-03 filter插件简介及date插件讲解.avi...

    基于tensorflow的一些图像处理实战项目源码+项目说明:API编写LeNet5网络做分类,训好迁移到花朵分类等.zip

    基于tensorflow的一些图像处理实战项目源码+项目说明:keras的API编写LeNet5网络来做mnist的分类,将谷歌训好的incep-V3迁移到花朵分类等.zip tensorflow 一些关于图像处理的实现 tsq:卷积、池化 LeNet5_mnist:...

    RabbitMQ实战

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送...

    QCon 2009 beijing全球企业开发大会ppt:3.Jeff Barr-Amazon Web Services

    Jeff Barr是亚马逊(Amazon)的云计算战略师,在该主题中,他将和与会者分享亚马逊企业级Web Services路线图,比如亚马逊的 EC2(Elastic Compute Cloud),S3(Simple Storage Service)和 SQS(Simple Queue ...

    python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列....#多线程实战栗子(糗百) #用一个队列Queue对象, #先产生所有url,put进队列; #开启多线程,把queue队列作为参数传入 #主函数中读取url import requests from queu

    RabbitMQ实战视频课程

    MQ全称为Message Queue,?MQ是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,...

    Python算法应用实战之队列详解

    队列(queue) 队列是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作,队列的操作方式和堆栈...

    tfrecord数据.zip

    tensorflow实战场景tfrecord方式读取数据的数据样本,现在tensorflow架构里限制整个流程瓶颈的是数据IO,用Queue机制异步的方式(生产者消费者模式)实现数据IO可以高效完成数据的预处理和读取,有效利用GPU资源。

    javalruleetcode-leetcode:leetcode刷题集合

    queue,deque,priorty queue) 5.哈希表,映射,集合 6.树,二叉树,二叉搜索树 7.泛型递归、树的递归 ​ 实战题目 (需要重新看,多理解,中序遍历的一个应用) (要考虑没有叶子节点的情况,即是null不是叶子节点) ...

Global site tag (gtag.js) - Google Analytics