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的话,无法确定一个消息最终会被哪一个消费者消费。
分享到:
相关推荐
#### 四、JMS 提供者与配置 JMS 本身只是一个接口规范,需要具体的实现来支撑其运行。在 Java EE 环境中,可以通过 JNDI 查找 `ConnectionFactory` 和 `Destination`。而在非 Java EE 环境中,则需要通过 JMS 提供...
建议仔细阅读,结合实际操作进行学习。 六、MyTestWeb项目 这个项目的名称可能是包含一个或多个演示JMS功能的Web应用。可能包含了Web页面用于触发消息的发送,以及后台服务用于处理消息的接收和处理。通过部署和...
通过本教程的学习,我们可以了解到JMS不仅仅是Java消息服务的一个标准API,更是构建高效、可靠的企业级应用的基础。掌握JMS的基本概念、架构和应用场景对于任何希望在分布式环境中构建稳定、高性能系统的Java开发者...
通过本篇文章的学习,我们不仅了解了JMS的基本结构和开发实例,还深入了解了其高级接口、编程模型以及消息读取方式等内容。掌握JMS的核心概念和技术可以帮助开发者更好地构建复杂的企业级应用,提高系统的灵活性和可...
四、SUN MQ与JMS SUN MQ(现已被IBM WebSphere MQ取代)是遵循JMS规范的一个具体实现,它提供了一种高效、可靠的分布式消息传递机制。SUN MQ支持JMS接口,允许开发者使用JMS API进行编程,同时提供了丰富的管理和...
不仅提供了关于JMS和TongLINK/Q的全面知识,还包含了大量实用的配置示例和代码片段,对于正在或计划在分布式系统中运用JMS和TongLINK/Q的IT专业人员而言,是不可或缺的学习资料。通过阅读本手册,开发者能够深入了解...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。...CHM文件是一种常见的帮助文档格式,可以在Windows环境下离线查看,方便开发者随时查询和学习。
### 四、JMS消息模式 1. **同步和异步**:JMS允许同步(阻塞直到消息到达)和异步(回调或轮询)消费模式。 2. **事务处理**:JMS支持两种类型的事务——本地事务(Session级别的)和分布式事务(X/Open XA)。 3...
#### 四、ActiveMQ概述 **ActiveMQ** 是Apache出品的一款开源消息中间件,它实现了JMS规范,并提供了额外的功能和扩展性。ActiveMQ支持多种协议,如AMQP、STOMP等,这使得它可以与其他非Java环境下的消息系统集成。 ...
根据提供的文件信息,我们可以梳理出一系列与JMS相关的硕士学位论文的研究方向及主要内容。JMS(Java Message ...通过对这些论文的学习和研究,可以全面了解JMS技术的最新发展动态及其在企业级应用中的重要作用。
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API...通过阅读"JMS简明教程.pdf",你可以进一步深化对JMS的理解,同时"中国java下载站.url"可能是获取更多Java资源和学习资料的链接。
通过上述四个消息中间件的学习和源码分析,你可以掌握消息中间件的核心概念和技术,这对于构建高效、稳定的分布式系统至关重要。在实践中,你可以结合具体的业务场景,选择适合的消息中间件,并优化其配置,以满足...
#### 四、JMS发送消息客户端编码示例 下面是一个简单的JMS发送消息客户端的编码示例,用于展示如何使用JMS API来发送消息: ```java package wf.jms.send; import javax.jms.*; import javax.naming.Context; ...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 一、Apache ActiveMQ简介 - **定义**:Apache ...通过深入学习和实践这些知识点,开发者可以更好地利用 ActiveMQ 构建高效、稳定的消息传递系统。
通过本文档的学习,我们了解了ActiveMQ 的主要特点及其与Tomcat的整合方式。ActiveMQ 作为一个成熟的JMS Provider,不仅功能强大,而且易于集成到各种应用场景中。无论是对于初学者还是有经验的开发者来说,掌握...
- 通过实践操作,学习如何配置并运行基于WAS v6的服务集成和JMS相关资源。 - 探索服务集成资源与JMS资源之间的映射关系,并了解这些资源如何在WebSphere应用服务器的命名空间中绑定。 **二、实验内容概述** - **...
在本项目中,“ActiveMQ+Camel+Spring+jms Demo(一)”是一个结合了四个关键技术的示例,旨在展示如何构建一个基于消息中间件的分布式应用程序。这四个技术分别是ActiveMQ、Apache Camel、Spring框架以及Java消息...