`
ll_feng
  • 浏览: 383706 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

activeMO学习笔记二:发布和订阅

    博客分类:
  • j2ee
 
阅读更多
其实学习activeMQ的初衷就是要找一个能够实现异步消息的发布/订阅机制的解决方案。
一、要启动消息代理
也就是一个broker.在上一篇中,我是自建了一个内嵌的broker. 经过进一步的了解,实际上利用官方的代理才是最常见的应用场景。
这里直接执行官方解压包下的activemq.bat
若是要启动特定配置的broker.先确认配置文件如activemq-demo.xml存在于conf下。执行:
./activemq xbean:activemq-demo.xml 


二、创建消息发布者
在一个java 工程中来创建发布者类
package test.mq;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class TopicProducer {

	    public static void main(String[] args) throws JMSException {  
	        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
	        Connection connection = factory.createConnection();  
	        connection.start();  
	          
	        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
	        Topic topic = session.createTopic("Topics.alert");  
	  
	        MessageProducer producer = session.createProducer(topic);  
	        producer.setTimeToLive(60000);	//设定消息过期时间
	        //producer.setDeliveryMode(DeliveryMode.PERSISTENT);	//设置消息的持久化为永不过期  
	        

	        int i= 1;
	        while(i<10) {  
	            TextMessage message = session.createTextMessage();  
	            message.setText("message_"+ i +" : "+ System.currentTimeMillis());  
	            producer.send(message);  
	            System.out.println("Sent message: " + message.getText());  
	            i++;
	            try {  
	                Thread.sleep(1000);  
	            } catch (InterruptedException e) {  
	                e.printStackTrace();  
	            }  
	        }  
	  
//	      session.close();  
//	      connection.stop();  
//	      connection.close();  
	    }   
}


三、创建消息订阅者
在一个java工程中创建订阅者类
package test.mq;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class TopicConsumer {
    public static void main(String[] args) throws JMSException {  
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
        Connection connection = factory.createConnection();  //factory.createTopicConnection();//
        //若是持久订阅,这里必须设置当前订阅者的id,并在第一次运行时注册到borker上
        connection.setClientID("zhangsan");	
        connection.start();  
          
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
        Topic topic = session.createTopic("Topics.alert");  
  
        //MessageConsumer consumer = session.createConsumer(topic);
        //如果是持久订阅,用下面的两行,替代上面的一行
        TopicSubscriber subscriber = session.createDurableSubscriber(topic, "zhangsan");
        subscriber.setMessageListener(new MessageListener() {
        //consumer.setMessageListener(new MessageListener() {  
            public void onMessage(Message message) {  
                TextMessage tm = (TextMessage) message;  
                try {  
                    System.out.println("Received message: " + tm.getText());  
                } catch (JMSException e) {  
                    e.printStackTrace();  
                }  
            }  
        });  
//      session.close();  
//      connection.stop();  
//      connection.close();  
    } 
}


四、测试
1、运行发布者类TopicProducer.java.在确认成功后。
2、运行订阅者类TppicConsumer.java.可以看到所有的消息都被接收过来了。
3、还可以修改发布者的主题(topic)后测试,发现订阅者接受到不任务消息。
4、还可以确认两个客户端的主题一致的前提下,在发布完成后,将发布者停止后,再启动订阅者。可以发现订阅都照样可以接受该主题的消息,这一切说明持久化的发布/订阅是成功了!

五、小结:
1、推荐使用官方的broker.
2、两个客户端(发布者和订阅者)都要设置相同的主题,即:
Topic topic = session.createTopic("Topics.alert"); //Topics.alert就是主题名

3、若是希望订阅者能够事后接收在它不活时所发布的消息,必须为订阅者设置ID,即:
connection.setClientID("zhangsan");	

这个id可以随意起名,会在订阅者第一次连接broker时,注册到代理服务器上。
分享到:
评论

相关推荐

    Unity Terrain Adjust

    核心特性:地形调整的灵活性 地形高度与坡度调整: 利用Terrain Adjust,设计师可以根据需要轻松调整地形的高度和坡度,创造出更加自然和真实的环境。 光滑边缘处理: 工具提供了边缘平滑功能,确保地形调整后的过渡自然,避免了突兀的高低变化。 自定义画笔设置: 可调整画笔大小、衰减、间距等参数,让设计师能够精确控制地形的每一个细节。 应用场景:多样化的地形创作 道路与岩石融合: 利用Terrain Adjust,可以将道路和岩石自然地混合到地形中,为游戏世界增添更多细节。 坡道创建: 工具还支持创建坡道,为游戏中的车辆或其他移动元素提供更加丰富的地形变化。 技术细节:轻量级与高效 编辑器专用: 作为编辑器的专用工具,Terrain Adjust不会对项目造成混乱,保持了工作环境的整洁。 Collider需求: 为了使用Terrain Adjust,目标对象需要有Collider组件,以确保地形调整的准确性。 Terrain Adjust工具以其轻量级设计和强大的地形调整功能,成为了Unity环境设计师的得力助手。它不仅提高了工作效率,还为创造更加丰富和真实的游戏世界提供了可能。

    基于 Shell 的驾照理论考试练习软件的设计与实现

    【作品名称】:基于 Shell 的驾照理论考试练习软件的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 测试题数据存储设计 # 测试题目文件夹 # 每个测试题作为一个目录,目录下面必须有 content.txt、options.txt 和 answer.txt 三个文件 # content.txt 文件内容为题目内容 # options.txt 文件内容为题目选项,每个选项占一行 # answer.txt 文件内容为正确答案 export tests_folder='./tests' 复习错题集自动删除答对的错题 export failed_list_file='failed.txt' # 错题集文件 sed -i '' "/$test/d" $failed_list_file

    PiP-Tool.msi

    PiP-Tool

    node-v0.10.42-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    【毕业设计】YOLOv9 QT+NCNN实现安卓端部署源码+部署步骤+演示apk.zip

    高分毕业设计源码 基于YOLO的毕业选题设计的程序源码,适用与计算机与软件工程毕业设计选题

    node-v0.10.28-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.10.19-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.10.30-linux-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    23230106孙悦1.doc

    23230106孙悦1.doc

    node-v0.12.12-darwin-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.10.2-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.12.17-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    西北工业大学数字逻辑实验三

    西北工业大学数字逻辑实验三

    JAVA物业管理系统设计与实现(LW+源代码).zip

    JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(LW+源代码)JAVA物业管理系统设计与实现(L

    node-v0.11.11-linux-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    springboot299基于Java的家政服务平台的设计与实现.rar

    开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat11+ 开发软件:idea/eclipse(推荐idea)

    【毕业设计】基于YOLOv9+Flask构建的目标检测Web应用+使用步骤.zip

    高分毕业设计源码 基于YOLO的毕业选题设计的程序源码,适用与计算机与软件工程毕业设计选题

    我c++的笔记,有一些函数可供学习

    供学习

    Java项目之jspm学术成果管理系统(源码 + 说明文档)

    Java项目之jspm学术成果管理系统(源码 + 说明文档) 第二章 开发技术介绍 1 2.1 系统开发平台 1 2.2 平台开发相关技术 1 2.2.1 Java技术 1 2.2.2 mysql数据库介绍 1 2.2.3 MySQL环境配置 1 2.2.4 B/S架构 2 2.2.5 JSP技术介绍 2 第三章 系统分析 1 3.1 可行性分析 1 3.1.1技术可行性 1 3.1.2操作可行性 1 3.1.3 经济可行性 1 3.2性能需求分析 1 3.3功能分析 2 第四章 系统设计 4 4.1功能结构 4 4.2 数据库设计 4 4.2.1 数据库E/R图 5 4.2.2 数据库表 5 第五章 系统功能实现 12 5.1系统功能模块 12 5.2管理员功能模块 14 5.3用户功能模块 17 第六章 系统测试 18 第七章 总结与心得体会 19 7.1 总结 19 7.2 心得体会 19

    node-v0.10.26-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics