`

activeMq Topic使用案例

 
阅读更多
Topic实现publish和subscribe语义:
一条消息被publish时,它将发到所有感兴趣的订阅者,所以零到多个subscriber将接收到消息的一个拷贝。但是在消息代理接收到消息时,只有激活订阅的subscriber能够获得消息的一个拷贝。

这个例子可以先开启生产者,然后再进行消费。
/**
 * 
 */
package activeMQ.topicMessage;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

/**
 * @author Test
 * @createDate 2014-6-22上午10:57:35
 * @className TopicMsgProducer.java
 * @useFor 
 */
public class TopicMsgProducer {

	public void send() {
		//创建连接工厂
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
		
		Connection conn = null;
		try {
			//创建连接
			conn = factory.createConnection();
			conn.start();
			//创建会话
			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			//创建地点
			Topic topic = session.createTopic("topic.textMsg");
			//创建生产者
			MessageProducer producer = session.createProducer(topic);
		    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
		    producer.setTimeToLive(Message.DEFAULT_TIME_TO_LIVE);
			for(int i=0 ; i<10 ;i++) {
				TextMessage tmsg = session.createTextMessage();
				tmsg.setText("早上你好   "+i);
				producer.send(tmsg);
				System.out.println("发送的消息:"+tmsg.getText());
			}
		} catch (JMSException e) {
			e.printStackTrace();
		}  finally {
		}
	}
	@Test
	public void test()
	{
		new TopicMsgProducer().send();
	}
}


两个订阅的消费者
/**
 * 
 */
package activeMQ.topicMessage;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicSubscriber;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

/**
 * @author Test
 * @createDate 2014-6-22上午10:58:42
 * @className TopicMsgConsumer.java
 * @useFor 
 */
public class TopicMsgConsumer {

	public void receive() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
		Connection conn = null;
		try {
			conn = factory.createConnection();
			conn.setClientID("T1");
			conn.start();
			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			//订阅发布模式的 Topic对象 不是Destination
			Topic  topic = session.createTopic("topic.textMsg");
			TopicSubscriber subsriber = session.createDurableSubscriber(topic , "T1" );
			while (true) {
				TextMessage tm = (TextMessage)subsriber.receive() ;
				if (tm == null) {
					break;
				}
				System.out.println("Msg1 Received message: " + tm.getText());
			}


		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
	@Test
	public void test()
	{
		new TopicMsgConsumer().receive();
	}
	
}



/**
 * 
 */
package activeMQ.topicMessage;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicSubscriber;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

/**
 * @author Test
 * @createDate 2014-6-22上午10:58:42
 * @className TopicMsgConsumer.java
 * @useFor
 */
public class TopicMsg2Consumer {

	public void receive() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
		Connection conn = null;
		try {
			conn = factory.createConnection();
			conn.setClientID("T2");
			conn.start();
			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			// 订阅发布模式的 Topic对象 不是Destination
			Topic  topic = session.createTopic("topic.textMsg");
			TopicSubscriber subsriber = session.createDurableSubscriber(topic , "T2" );
			while (true) {
				TextMessage tm = (TextMessage)subsriber.receive() ;
				if (tm == null) {
					break;
				}
				System.out.println("Msg2 Received message: " + tm.getText());
			}
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}

	@Test
	public void test() {
		new TopicMsg2Consumer().receive();
	}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    一个jms activemq Topic 消息实例

    一个jms activemq Topic 消息实例 关于jms JMS 是接口,相当于jdbc ,要真正使用它需要某些厂商进行实现 ,即jms provider 常见的jms provider 有 ActiveMQ JBoss 社区所研发的 HornetQ (在jboss6 中默认即可以...

    ActiveMQ Topic 实例

    本教程将深入探讨ActiveMQ中的Topic特性,以及如何通过实例来理解和应用。 ActiveMQ Topic与Queue的主要区别在于消息分发方式。Queue采用点对点模型,每个消息只能被一个消费者接收并删除;而Topic遵循发布/订阅...

    spring+activemq topic持久化订阅

    spring +activemq topic消息持久化订阅实例,整个项目中有activemq和spring的整合的所有实例,topic的持久化配置是在ApplicationContext3C、ApplicationContext3C2以及ApplicationContext3P三个中,消息生产者:...

    ActiveMQ开发实例-1

    在"ActiveMQ开发实例-1"中,你将学习如何使用 ActiveMQ-CPP 库进行基本的发布/订阅(Publish/Subscribe)和点对点(Point-to-Point)模式的消息传递。这两种模式是消息中间件中最常见的通信模型。 1. **发布/订阅...

    activeMQ简单入门案例

    本教程将引导你通过一个简单的入门案例了解如何使用ActiveMQ实现生产者与消费者的模式。 首先,我们需要了解ActiveMQ的基本概念。在消息队列中,生产者是发送消息的实体,而消费者则是接收和处理这些消息的实体。...

    ActiveMQ使用手册(中文版)

    ### ActiveMQ 使用手册知识点概述 #### 一、ActiveMQ 原理与基本构件 **1.1 连接工厂(Connection Factory):** - **定义:** 连接工厂是客户端用来创建连接的对象。在ActiveMQ中,`ActiveMQConnectionFactory` 类...

    Spring和ActiveMQ的整合实例源码

    9. **Spring注解**:在提供的实例中,可能包含了使用注解的方式配置Spring与ActiveMQ的集成,如`@EnableJms`启动JMS支持,`@JmsListener`定义消息监听器等。 10. **Tomcat服务器**:Tomcat是一个流行的Java Web...

    ActiveMQ实例

    在ActiveMQ实例中,我们可能需要使用Java代码或者配置文件来设置生产者和消费者的连接,定义消息格式,以及指定消息的路由策略。同时,理解ActiveMQ的管理控制台也很重要,它提供了监控和管理消息队列、主题以及其他...

    基于Maven的ActiveMQ的简单实例

    在本文中,我们将深入探讨如何使用Maven构建一个基于ActiveMQ的简单实例。ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了多种消息协议,如JMS(Java消息服务)、AMQP(高级消息队列协议)等,为企业级...

    ActiveMQ开发实例-6

    ### ActiveMQ开发实例核心知识点解析 #### 一、ActiveMQ简介 **ActiveMQ**是由Apache组织维护的一个开源项目,作为一款高性能的消息中间件,它在众多消息传递系统中脱颖而出。ActiveMQ不仅支持JMS 1.1和J2EE 1.4...

    ActiveMQ简单Demo案例

    在这个"ActiveMQ简单Demo案例"中,我们将探讨如何使用ActiveMQ搭建服务器,并创建生成者(Producer)和消费者(Consumer)对象。 首先,我们需要理解JMS的概念。JMS是一个标准,定义了与消息传递系统交互的API,...

    ActiveMQ-P2P文本消息+Spring和ActiveMQ的整合实例源码

    Spring 框架提供了与 ActiveMQ 集成的能力,使得开发者可以轻松地在 Spring 应用中使用 ActiveMQ。整合主要通过以下组件实现: 1. **Spring JMS**: Spring 提供了 JmsTemplate 类,它是发送和接收 JMS 消息的主要...

    ActiveMq-JMS简单实例使用tomcat.pdf

    【ActiveMQ-JMS简单实例使用Tomcat】是一个关于如何在Tomcat环境下集成并使用ActiveMQ进行JMS消息传递的初级教程。ActiveMQ是一款开源的消息中间件,它遵循JMS(Java Message Service)1.1规范,能兼容J2EE1.4及以上...

    Spring与ActiveMQ整合完整案例

    本案例将详细讲解如何将Spring与ActiveMQ整合,以提升系统的可扩展性和解耦性。 1. **Spring框架**:Spring是一个全方位的开发框架,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...

    activeMQ-JMS实例

    在本文中,我们将深入探讨如何使用Spring MVC框架与ActiveMQ结合实现JMS(Java Message Service)实例。首先,让我们理解ActiveMQ和JMS的基本概念。 ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了...

    ActiveMQ开发实例-5

    在"ActiveMQ开发实例-5"中,重点在于实际操作和实践,通过C++和MFC实现消息的发送和接收,结合其他实例资源,你可以更深入地理解ActiveMQ的使用和功能。通过这个实例,开发者可以将消息队列技术有效地应用于自己的...

    用C#实现的ActiveMQ发布/订阅消息传送

    在本场景中,我们关注的是如何使用C#编程语言结合ActiveMQ来实现发布/订阅模式的消息传送。ActiveMQ是Apache软件基金会开发的一个开源消息传递平台,支持多种协议,包括NMS(.NET Messaging Service),它是专门为...

    springboot整合activemq案例

    总结起来,这个Spring Boot整合ActiveMQ的案例涵盖了如何配置和使用Queue与Topic,以及通过定时任务和Controller请求来发送消息。理解并掌握这些知识点,有助于我们在实际项目中构建高效、可靠的分布式消息传递系统...

    ActiveMQ入门及深入使用的例子

    本教程将引导你从基础到深入理解如何使用ActiveMQ,并通过实际的例子进行操作。 首先,我们要了解JMS是什么。Java Message Service(JMS)是一个Java API,它定义了应用程序如何创建、发送、接收和读取消息的标准...

    Sping整合ActiveMq案例.zip

    本案例将重点讲解如何将Spring与ActiveMQ整合,以实现高效的消息传递功能。 首先,让我们了解Spring整合ActiveMQ的基础知识。Spring框架提供了对多种消息中间件的支持,包括ActiveMQ,通过其`spring-jms`模块,我们...

Global site tag (gtag.js) - Google Analytics