`

深入掌握JMS(五):实战Topic

阅读更多

        与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。

package com.bijian.study;

import javax.jms.Connection;
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 javax.jms.Topic;

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

public class TopicTest {

	public static void main(String[] args) throws Exception {
		
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
		Connection connection = factory.createConnection();
		connection.start();
		
		// 创建一个Topic
		Topic topic = new ActiveMQTopic("testTopic");
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		
		// 注册消费者1
		MessageConsumer comsumer1 = session.createConsumer(topic);
		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(topic);
		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(topic);
		for (int i = 0; i < 10; i++) {
			producer.send(session.createTextMessage("Message:" + i));
		}
	}
}

        运行后得到下面的输出结果:

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

        说明每一个消息都会被所有的消费者消费。

 

文章来源:http://www.cnblogs.com/guthing/archive/2010/06/12/1757154.html

分享到:
评论

相关推荐

    深入掌握 JMS(java message service)

    ### 深入掌握 JMS(Java Message Service) #### JMS 基础概念 - **JMS**(Java Message Service)是一种Java平台中的消息中间件技术标准,它定义了一套标准API,用于应用程序之间的消息传递。JMS的出现极大地简化...

    JMS规范培训教程 中文版

    **正文** JMS(Java Message ...本教程的目的是帮助开发者掌握JMS的使用,从而能够更好地设计和实现基于消息传递的应用程序。无论你是初学者还是有经验的开发者,都可以从这个中文版的JMS规范培训教程中受益匪浅。

    2019实战ActiveMQ集群与应用实战视频教程

    根据提供的文件信息,以下是从标题、描述、...通过学习这些知识点,不仅可以帮助开发者深入了解 ActiveMQ 的工作原理,还能够掌握如何在实际项目中有效地利用 ActiveMQ 解决消息传递问题,提高系统的稳定性和扩展性。

    ActiveMQ实战(英文版)

    这本书《ActiveMQ实战(英文版)》旨在深入探讨如何在实际环境中有效地使用和管理ActiveMQ。 ActiveMQ的核心功能包括: 1. **消息传递**:ActiveMQ作为消息代理,允许应用程序之间通过发送和接收消息进行异步通信。...

    ActiveMQ实战——实现一个简易版的聊天室

    在本篇《ActiveMQ实战——实现一个简易版的聊天室》中,我们将深入探讨如何利用Apache ActiveMQ构建一个简单的在线聊天应用。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,用于在...

    基于消息中间件的学习记录以及源码示例【JMS、AMQP、ActiveMQ、RocketMQ】.zip

    本文将深入探讨基于消息中间件的学习记录,包括Java消息服务(JMS)、先进消息队列协议(AMQP)以及两个流行的开源实现:ActiveMQ和RocketMQ。 首先,Java消息服务(JMS)是一种标准API,用于在Java应用程序之间...

    私塾在线 高级java软件架构师实战培训视频教程 阶段一 代码及目录 85-90 讲 共148讲

    本节可能深入探讨了如何创建、管理和优化Destination,包括队列(Queue)和主题(Topic)的高级用法,以及如何处理并发访问和负载均衡,确保高效的消息传递。 2. **MessageDispatch高级特性**(第86、87、88、90节...

    activeMQ实战demo

    在这个“ActiveMQ实战demo”中,我们将深入探讨如何使用ActiveMQ进行消息发送和接收,并了解其工作原理。 首先,让我们了解一下JMS。JMS是Java平台上的一个标准接口,定义了生产、消费、管理和消息队列的标准API。...

    activemq-example

    本篇文章将深入探讨`activemq-example`,即ActiveMQ的实际应用案例,通过分析`activemq-in-action-read-only`中的内容,帮助读者理解并掌握ActiveMQ的核心概念和使用方法。 一、ActiveMQ基本概念 1. 消息与队列:...

    ActiveMQ.in.Action

    《ActiveMQ in Action》是一本深入探讨Apache ActiveMQ的实战指南,主要面向那些希望理解和掌握消息中间件技术,特别是ActiveMQ的开发者和系统管理员。这本书详细介绍了如何利用ActiveMQ构建可扩展、高可用且可靠的...

    ActiveMQ in Action

    《ActiveMQ in Action》这本书是关于消息中间件Apache ActiveMQ的实战指南,旨在帮助读者深入理解和熟练使用这一强大的开源消息代理。Apache ActiveMQ是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步...

    activemq实战项目,同ssh框架整合(生产者+消费者)

    通过这个实战项目,开发者可以深入理解如何在Java Web环境中使用ActiveMQ,以及如何解决在实际应用中可能出现的问题,如消息的可靠传输和幂等问题。同时,它也提供了一个良好的学习平台,帮助初学者掌握SSH与...

    activemq中间件视频教程

    Apache ActiveMQ是业界广泛使用的开源消息...本“ActiveMQ中间件视频教程”旨在为初学者和开发者提供一个全面、深入的学习资源,通过理论讲解和实战演练,帮助大家熟练掌握ActiveMQ的使用,提升系统设计和开发能力。

    JavaEECoreFrameworkPractisesV2Code:Java EE核心框架实战(第2版)源代码

    《Java EE核心框架实战(第2版)》的源代码包"JavaEECoreFrameworkPractisesV2Code-master"提供了一次深入理解Java企业级应用开发的宝贵机会。这个开源项目旨在帮助开发者们掌握Java EE平台的核心技术,包括但不限于...

    Jboss EJB3.0 实例教程.pdf

    #### 五、JMS (Java Message Service) - **消息驱动Bean (Message-Driven Bean)**:专门用于处理异步消息,支持队列(Queue)和主题(Topic)两种消息传递模型。 - **队列消息**:基于点对点(PTP)的消息传递模型。 - ...

    IBM WebSphere MQ Java编程(中文版)

    通过对IBM WebSphere MQ Java编程的学习,开发者可以掌握如何利用Java编程语言高效地与WebSphere MQ进行交互,从而构建出高性能、可靠的企业级应用系统。无论是初学者还是有经验的开发者,都能从本文档中获得宝贵的...

    ActiveMqDemo.7z

    ActiveMQ是Apache软件基金会开发的一款开源的消息中间件,它基于Java消息服务(JMS)规范,提供可靠的消息传递功能,被广泛应用于分布式系统中,以解耦应用程序,提高系统的可扩展性和容错性。在本篇中,我们将深入...

    RocketMQ学习笔记 .pdf

    RocketMQ学习笔记主要涵盖了消息队列(MQ)的相关知识,内容深入浅出,不仅包含理论知识,还融入了实战案例和源码分析,适用于希望掌握RocketMQ的开发者。 首先,RocketMQ是一个分布式、开源的消息中间件,它起源于...

    activeMQ.zip

    发布/订阅模式则基于JMS的Topic,允许多个订阅者同时接收同一消息。在这个模型中,生产者发布消息到一个主题,而所有订阅了该主题的消费者都能接收到消息。这使得广播消息和事件驱动的架构成为可能。在activeMQ.zip...

    ShineActiveMQ.rar

    《ActiveMQ深度解析与实战指南》 ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,广泛应用于企业级应用系统中,尤其在物联网(IoT)领域,其稳定性和高效率使得它成为了许多开发者的...

Global site tag (gtag.js) - Google Analytics