与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主要提供了两种消息模式:主题(Topic)和队列(Queue),这两种模式在实现方式和功能上有所不同。 1. 主题(Topic): - **发布/订阅模型**:主题基于发布/订阅模型,其中多个生产者可以发布消息到一个特定的...
### ESB应用JMS_Topic知识点详解 #### 一、ESB与JMS_Topic简介 **企业服务总线(Enterprise Service Bus, ESB)**是一种软件架构模式,用于实现不同应用程序之间的通信与数据交换。它提供了一种灵活且可扩展的方式...
本文将详细介绍如何在WebLogic中使用JMS来创建Queue(队列)和TOPIC(主题)并进行消息的发送与接收。 ### 一、JMS基本概念 1. **Queue(队列)**:队列是一种点对点的消息传递模型,其中每个消息只会被一个消费者...
【EJB to JMS:理解消息传递与JMS Topic】 在企业级Java应用程序中,有时我们需要在不同组件之间传递信息,而无需它们直接相互依赖。这就是Java消息服务(Java Message Service,简称JMS)发挥作用的地方。JMS允许...
WebLogic 9.2配置JMS(Java Message Service)涉及一系列步骤,主要目的是为了实现分布式消息传递,包括点对点的Queue模式和发布/订阅的Topic模式。在本例中,我们将专注于配置发布/订阅模式,即Topic。以下是详细的...
一个jms activemq Topic 消息实例 关于jms JMS 是接口,相当于jdbc ,要真正使用它需要某些厂商进行实现 ,即jms provider 常见的jms provider 有 ActiveMQ JBoss 社区所研发的 HornetQ (在jboss6 中默认即可以...
标题"spring boot jsm ibmmq topic queue"涉及到的是如何在Spring Boot项目中使用JMS与IBM MQ进行交互,包括发布/订阅模型(Topic)和点对点模型(Queue)两种方式。下面将详细解释这两个概念以及如何在Spring Boot...
<Resource name="jms/topic/MyTopic" auth="Container" type="org.apache.activemq.command.ActiveMQTopic" description="My JMS Topic" physicalName="MyTopic"/> ``` 配置完成后,开发者就可以在Java应用程序中...
javax.jms.Topic.class javax.jms.MapMessage.class javax.jms.ObjectMessage.class javax.jms.StreamMessage.class javax.jms.TextMessage.class javax.jms.MessageListener.class javax.jms.MessageProducer.class...
标题 "一个Topic和subscriber的JMS应用" 描述了一个基于Java消息服务(JMS)的系统,该系统涉及发布/订阅模式,其中Topic是发布者发送消息的地方,而subscriber是接收这些消息的实体。JMS是一种标准接口,允许应用...
`javax.jms.jar` 文件中包含了如`javax.jms.Queue`, `javax.jms.Topic`, `javax.jms.MessageProducer`, `javax.jms.MessageConsumer`, `javax.jms.ConnectionFactory`等关键接口,以及其他辅助类和异常类,开发者...
在JMS中,当生产者发布一条消息到Topic时,所有已订阅该Topic的消费者都会接收到这个消息,这与Queue中的一对一通信形成鲜明对比。这种多对多的通信方式使得广播在系统扩展性和分布式通知场景下非常有用。 为了实现...
Queue 和 Topic 是 JMS(Java Message Service)中两种基本的消息模式,分别对应 Point-to-Point 和 Publish/Subscribe 模式。 Queue 模式 在 Queue 模式中,一条消息仅能被一个消费者(Consumer)接收。如果在...
- **重点**:使用JMS Topic组件实现发布订阅模式的消息传播。 - **实现**:创建Topic并配置多个订阅者,测试消息的发布与接收机制。 #### 十一、第十个ESB应用Message Filters - **重点**:探索如何使用Message ...
5. **主题(Topic)**:支持多播,允许多个消费者同时接收相同的消息。发布/订阅模型,发布者发布消息到主题,多个订阅者可以订阅该主题并接收消息。 6. **消息代理(Message Broker)**:也称为消息中间件,是负责...
在创建的JMS Server的`Destinations`子目录下,建立多个JMS Queue和JMS Topic,如`Wf_EventQueue`、`Wf_ProcessFinEventQueue`、`Wf_AccountEventQueue`、`Wf_SendSwfEventQueue`以及`Wf_WorklistNotifyTopic`和`BU_...
- **发布/订阅模型**:多个消费者可以订阅同一主题,消息会被所有订阅者接收,对应于JMS Topic。 5. **hornetqTest实例** "hornetqTest"可能是包含一个或多个测试用例的目录或文件,用于演示或验证HornetQ的功能...
而在发布/订阅模型中,消息被发布到主题(Topic),多个订阅者可以同时接收到消息。 3. **JMS接口**:`javax.jms` 包包含了一系列的接口,如`ConnectionFactory`、`Destination`、`MessageProducer`、`...