ActiveMQ(2):主题(topic)的实现

2024-05-24 10:48
文章标签 实现 主题 activemq topic

本文主要是介绍ActiveMQ(2):主题(topic)的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、    实现功能

因为是主题订阅,所以,可以实现一对多的消息通知,从而可以使消息可以通知多方。

二、topic(主题)代码实现

1.    生产者

package com.example.activeMQ;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;/*** @className TopicMsgProducer.java* @useFor*/
public class TopicMsgProducer {public void send() {//创建连接工厂ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.205.10: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 {try {if (conn !=null )conn.close();} catch (Throwable ignore) {}}}public static void main(String[] args) {new TopicMsgProducer().send();}
}

2.    消费者1

package com.example.activeMQ;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;/*** @className TopicMsgConsumer.java* @useFor*/
public class TopicMsgConsumer {public void receive() {ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.205.10:61616");Connection conn = null;try {conn = factory.createConnection();conn.setClientID("T1");conn.start();Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);//订阅发布模式的 Topic对象 不是DestinationTopic  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();}}}}public static void main(String[] args) {new TopicMsgConsumer().receive();}
}

3.    消费者2

package com.example.activeMQ;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;/*** @className TopicMsgConsumer.java* @useFor*/
public class TopicMsgConsumer2 {public void receive() {ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.205.10:61616");Connection conn = null;try {conn = factory.createConnection();conn.setClientID("T2");conn.start();Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);// 订阅发布模式的 Topic对象 不是DestinationTopic  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();}}}}public static void main(String[] args) {new TopicMsgConsumer2().receive();}
}

三、测试

1.开启消费者1和消费者2

2.运行生产者产生消息,查看消费者消费消息

(1)消费者1
Msg1 Received message: 早上你好   0
Msg1 Received message: 早上你好   1
Msg1 Received message: 早上你好   2
Msg1 Received message: 早上你好   3
Msg1 Received message: 早上你好   4
Msg1 Received message: 早上你好   5
Msg1 Received message: 早上你好   6
Msg1 Received message: 早上你好   7
Msg1 Received message: 早上你好   8
Msg1 Received message: 早上你好   9
(2)消费者2
Msg2 Received message: 早上你好   0
Msg2 Received message: 早上你好   1
Msg2 Received message: 早上你好   2
Msg2 Received message: 早上你好   3
Msg2 Received message: 早上你好   4
Msg2 Received message: 早上你好   5
Msg2 Received message: 早上你好   6
Msg2 Received message: 早上你好   7
Msg2 Received message: 早上你好   8
Msg2 Received message: 早上你好   9

4.查看监控
 

四、参考

1.https://www.cnblogs.com/winner-0715/p/6697102.html

这篇关于ActiveMQ(2):主题(topic)的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998195

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.