与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。
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("vm://localhost");
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
说明每一个消息都会被所有的消费者消费。
分享到:
相关推荐
### 深入掌握 JMS(Java Message Service) #### JMS 基础概念 - **JMS**(Java Message Service)是一种Java平台中的消息中间件技术标准,它定义了一套标准API,用于应用程序之间的消息传递。JMS的出现极大地简化...
**正文** JMS(Java Message ...本教程的目的是帮助开发者掌握JMS的使用,从而能够更好地设计和实现基于消息传递的应用程序。无论你是初学者还是有经验的开发者,都可以从这个中文版的JMS规范培训教程中受益匪浅。
根据提供的文件信息,以下是从标题、描述、...通过学习这些知识点,不仅可以帮助开发者深入了解 ActiveMQ 的工作原理,还能够掌握如何在实际项目中有效地利用 ActiveMQ 解决消息传递问题,提高系统的稳定性和扩展性。
这本书《ActiveMQ实战(英文版)》旨在深入探讨如何在实际环境中有效地使用和管理ActiveMQ。 ActiveMQ的核心功能包括: 1. **消息传递**:ActiveMQ作为消息代理,允许应用程序之间通过发送和接收消息进行异步通信。...
在本篇《ActiveMQ实战——实现一个简易版的聊天室》中,我们将深入探讨如何利用Apache ActiveMQ构建一个简单的在线聊天应用。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,用于在...
本文将深入探讨基于消息中间件的学习记录,包括Java消息服务(JMS)、先进消息队列协议(AMQP)以及两个流行的开源实现:ActiveMQ和RocketMQ。 首先,Java消息服务(JMS)是一种标准API,用于在Java应用程序之间...
在这个“ActiveMQ实战demo”中,我们将深入探讨如何使用ActiveMQ进行消息发送和接收,并了解其工作原理。 首先,让我们了解一下JMS。JMS是Java平台上的一个标准接口,定义了生产、消费、管理和消息队列的标准API。...
本节可能深入探讨了如何创建、管理和优化Destination,包括队列(Queue)和主题(Topic)的高级用法,以及如何处理并发访问和负载均衡,确保高效的消息传递。 2. **MessageDispatch高级特性**(第86、87、88、90节...
本篇文章将深入探讨`activemq-example`,即ActiveMQ的实际应用案例,通过分析`activemq-in-action-read-only`中的内容,帮助读者理解并掌握ActiveMQ的核心概念和使用方法。 一、ActiveMQ基本概念 1. 消息与队列:...
《ActiveMQ in Action》是一本深入探讨Apache ActiveMQ的实战指南,主要面向那些希望理解和掌握消息中间件技术,特别是ActiveMQ的开发者和系统管理员。这本书详细介绍了如何利用ActiveMQ构建可扩展、高可用且可靠的...
《ActiveMQ in Action》这本书是关于消息中间件Apache ActiveMQ的实战指南,旨在帮助读者深入理解和熟练使用这一强大的开源消息代理。Apache ActiveMQ是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步...
通过这个实战项目,开发者可以深入理解如何在Java Web环境中使用ActiveMQ,以及如何解决在实际应用中可能出现的问题,如消息的可靠传输和幂等问题。同时,它也提供了一个良好的学习平台,帮助初学者掌握SSH与...
Apache ActiveMQ是业界广泛使用的开源消息...本“ActiveMQ中间件视频教程”旨在为初学者和开发者提供一个全面、深入的学习资源,通过理论讲解和实战演练,帮助大家熟练掌握ActiveMQ的使用,提升系统设计和开发能力。
《Java EE核心框架实战(第2版)》的源代码包"JavaEECoreFrameworkPractisesV2Code-master"提供了一次深入理解Java企业级应用开发的宝贵机会。这个开源项目旨在帮助开发者们掌握Java EE平台的核心技术,包括但不限于...
#### 五、JMS (Java Message Service) - **消息驱动Bean (Message-Driven Bean)**:专门用于处理异步消息,支持队列(Queue)和主题(Topic)两种消息传递模型。 - **队列消息**:基于点对点(PTP)的消息传递模型。 - ...
通过对IBM WebSphere MQ Java编程的学习,开发者可以掌握如何利用Java编程语言高效地与WebSphere MQ进行交互,从而构建出高性能、可靠的企业级应用系统。无论是初学者还是有经验的开发者,都能从本文档中获得宝贵的...
ActiveMQ是Apache软件基金会开发的一款开源的消息中间件,它基于Java消息服务(JMS)规范,提供可靠的消息传递功能,被广泛应用于分布式系统中,以解耦应用程序,提高系统的可扩展性和容错性。在本篇中,我们将深入...
RocketMQ学习笔记主要涵盖了消息队列(MQ)的相关知识,内容深入浅出,不仅包含理论知识,还融入了实战案例和源码分析,适用于希望掌握RocketMQ的开发者。 首先,RocketMQ是一个分布式、开源的消息中间件,它起源于...
《ActiveMQ深度解析与实战指南》 ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,广泛应用于企业级应用系统中,尤其在物联网(IoT)领域,其稳定性和高效率使得它成为了许多开发者的...
发布/订阅模式则基于JMS的Topic,允许多个订阅者同时接收同一消息。在这个模型中,生产者发布消息到一个主题,而所有订阅了该主题的消费者都能接收到消息。这使得广播消息和事件驱动的架构成为可能。在activeMQ.zip...