1.2-ActiveMQ主题(Topic)模式下消息生产与消费

go 封装 ActiveMq,并实现 topic 和 queue 的生产和消费 go 封装 ActiveMq,并实现 topic 和 queue 的生产和消费 需要了解的基础知识 总所周知 activemq 有两种消息传递类型分别为 queue Point-to-Point,点对点通信模型,即一个生产者对应一个消费者 topic publish-and- subscribe,发布订阅模型,一个生产者可根据订阅向多个消费者推送数据 go 连接 activemq 的... 阅读详情

ActiveMQ主题(Topic)模式下消息生产与消费

消息生产者

package service.topic;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

public class TopicProducer {

    /**
     * ActiveMq服务器地址
     * 支持的协议参见官网  http://activemq.apache.org/configuring-transports
     * TCP协议使用文档 http://activemq.apache.org/tcp-transport-reference
     */
    public static final String DEFAULT_BROKER_URL = "tcp://192.168.136.135:61616";

    public static final String USER_NAME = "admin";

    public static final String PWD = "admin";

    public static final String TOPIC_NAME = "test.topic";

    public void work() {
        try {
            // 1. Create a ConnectionFactory
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PWD, DEFAULT_BROKER_URL);

            // 2. Create a Connection
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // 3. Create a Session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // 4.Create the destination (Topic or Queue)
            Destination destination = session.createTopic(TOPIC_NAME);

            // 5. Create a MessageProducer from the Session to the Topic or Queue  创建消息生产者
            MessageProducer producer = session.createProducer(destination);
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            // 6. Create a messages  创建消息
            String text = System.currentTimeMillis() + "Hello world! From: " + Thread.currentThread().getName();
            TextMessage message = session.createTextMessage(text);

            // Tell the producer to send the message   生产者发送消息
            System.out.println("Sent message: " + text);
            producer.send(message);

            // Clean up
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

消息消费者

package service.topic;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

public class TopicConsumer implements Runnable {

    /**
     * ActiveMq服务器地址
     * 支持的协议参见官网  http://activemq.apache.org/configuring-transports
     * TCP协议使用文档 http://activemq.apache.org/tcp-transport-reference
     */
    public static final String DEFAULT_BROKER_URL = "tcp://192.168.136.135:61616";

    public static final String USER_NAME = "admin";

    public static final String PWD = "admin";

    public static final String TOPIC_NAME = "test.topic";

    public static void main(String[] args) {
    }

    public void run() {
        try {
            // 1. Create a ConnectionFactory
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PWD, DEFAULT_BROKER_URL);

            // 2. Create a Connection
            Connection connection = connectionFactory.createConnection();
            connection.start();

            connection.setExceptionListener(new ExceptionListener() {
                public void onException(JMSException e) {
                    System.out.println("JMS Exception occured.  Shutting down client.");
                }
            });

            // 3. Create a Session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // 4.Create the destination (Topic or Queue)
            Destination destination = session.createTopic(TOPIC_NAME);

            // 5. Create a MessageConsumer from the Session to the Topic or Queue
            MessageConsumer consumer = session.createConsumer(destination);

            final String currentThreadName = Thread.currentThread().getName();

            // 6. Wait for a message
            consumer.setMessageListener(new MessageListener() {
                public void onMessage(Message message) {
                    if (message instanceof TextMessage) {
                        TextMessage textMessage = (TextMessage) message;
                        String text = null;
                        try {
                            text = textMessage.getText();
                        } catch (JMSException e) {
                            e.printStackTrace();
                        }
                        System.out.println(currentThreadName + " Received: " + text);
                    } else {
                        System.out.println(currentThreadName + " Received: " + message);
                    }
                }
            });
            // 阻塞线程,使消息消费完后才关闭连接
            System.in.read();
            consumer.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试:

package service.topic;

public class TopicTest {
    public static void main(String[] args) {
        //主题模式下需要先启动消费者
        for (int i = 0; i < 3; i++) {
            Thread topicThread = new Thread(new TopicConsumer());
            topicThread.setName("第" + i + "个消费者");
            topicThread.start();
        }
        new TopicProducer().work();
    }
}

Sent message: 1614507988736Hello world! From: main
第1个消费者 Received: 1614507988736Hello world! From: main
第0个消费者 Received: 1614507988736Hello world! From: main
第2个消费者 Received: 1614507988736Hello world! From: main


由此可见,生产者生产了一条消息,三个消费者均消费到了此消息。

topic,queue模式比较:

比较项Topic模式Queue模式
工作模式“订阅发布模式”,如果没有订阅者,消息会被丢弃,如有多个订阅者,那么多个订阅者都会受到消息“负载均衡”模式,如果没有消费者,消息也不会丢弃,如果有多个消费者,消息只会被其中一个消费者消费
有无状态无Queue数据会以文件形式在mq服务器上保存,也可配置数据库存储
传递完整性如果没有订阅者,消息会被丢弃消息不会被丢弃
处理效率消息按照订阅者数量进行复制,订阅者越多处理效率越低,不同消息协议间也会有差异一条消息只会被一个消费者消费,消费者再多性能也不会明显降低,不同消息协议间也会有差异
消息中间件ActiveMQ学习笔记(二) [Java编码MQ,消费者生产者基本模型] 创建一个Connection Factory连接工厂;然后通过连接工厂创建connection连接; 启动该链接后,可通过连接出session 会话; 创建destination目的地[可理解为队列/一种topic主题]; 创建. 阅读详情

相关推荐

Spring Boot 2与ActiveMQ整合实战:Queue与Topic消息处理

消息服务是一种应用间通信的机制,其中一个应用将消息发送到消息服务器,其他应用从服务器接收消息。这种方式可以解耦应用程序组件,有助于系统构建的灵活性和可扩展性。消息服务的好处在于,发送方和接收方不需要同时在线,消息服务器负责暂存消息,直到接收方准备就绪。消息服务的使用场景非常广泛,从简单的应用间通信到复杂的分布式系统集成都有涉及。消息服务是一种允许应用之间异步传递消息的通信机制,它提供了一种可靠的方式来发送和接收数据,无论接收者是否立即可用。

weixin_33670640的博客 664

JMS-TOPIC消费者端(JMS服务器采用activeMQ)

package com.active; import java.io.IOException;import java.util.Arrays; import javax.jms.Connection;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.ExceptionListener;impo...

baobeituping的专栏 415

Shopee滑块验证码太刁钻?手把手教你用Python+Playwright绕过弧形验证(附影刀RPA接入代码)

本文详细介绍了如何使用Python和Playwright结合SadCaptcha第三方服务高效破解Shopee平台的弧形滑块验证码,并集成到影刀RPA工作流中。该方案开发周期短、准确率高(>90%),特别适合跨境电商自动化操作,已在实际项目中验证成功。

weixin_29284657的博客 565

ActiveMQ——消息的生产和消费

是一对一,还是一对多 消费者

如不來的博客 4066

FPGA,关于安装使用libero IDE V9.2 及其gold floating license配置

3、license安装根据,下面的提示进行,跟随setting up the license server on a host教程操作。1、从官网下载Libero IDE v9.2(如下图中的Libero IDE v9.2 software)4、下载完成license解压包后还需要下载 Daemons license ,地址如下。(2)第一行并不是在内填写,而是直接用您电脑名替换掉(1)修改license.bat前四行是,其务必保持和案例位置相同(避免出错)............

JasonK的博客 4288

全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

-----------------------推荐Top5结果如下--------------------------------------------第一条数据前10列结果展示为:----------------------------------------相同种类前10的id结果展示为:--------------------相似度top5(商品id:14,平均相似度:0.522356)相似度top1(商品id:1,平均相似度:0.983456)若属于该spu_id,则内容为1否则为0。

Eternity_04的博客 1949

Spring整合ActiveMQ实现多个消费者配置(Queue与Topic模式)

需要依赖的jar包,包括但不限于&lt;!-- spring核心包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-core&lt;/artifactId&gt; &lt;version&

TheShawshank的博客 7404

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

ActiveMQ之基本投递模式,消费模式,持久化,死信策略

ActiveMQ异步投递,消费模式,持久化,死信队列清除

weixin_44004647的博客 1944

电磁场可视化

电磁场可视化 如题,做了电磁场可视化这么久了,也是颇有些心得了,简单描述一下怎么做这个项目的。 开始时是从最基本的OpenGL开始做的,必不可少的翻了许多的文献,后来是直接在unity中做,发现效果挺好,而且可控性强好多。反复琢磨后,发现可视化的渲染,有几种思路,第一就是用linerender,画线的方法,另一种就是用shader。 第一种我通过unity自带的linewave插件可以做到 详细的就是,linewave插件可以轻松画出曲线等,并且可以添加碰撞,控制频率幅度长度等一切的条件数值,而且令人惊喜

weixin_43979140的博客 1670

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 313

ActiveMQ入门教程(二)之队列模式(Queue)和主题模式(Topic)

ActiveMQ的架构 ActiveMQ主要涉及到5个方面: 1.传输协议:消息之间的传递,无疑需要协议进行沟通,启动一个ActiveMQ打开了一个监听端口, ActiveMQ提供了广泛的连接模式,其中主要包括SSL、STOMP、XMPP;ActiveMQ默认的使用的协议是openWire,端口号:61616; 2.消息域:ActiveMQ主要包含Point-to-Point (点对点)...

尼古拉斯大树的博客 1414

【GEE数据库】WRF常用数据集总结

【GEE数据库】WRF常用数据集总结

WW、forever的博客 633

ActiveMQ之发布- 订阅消息模式实现

本文介绍了发布者/订阅者消息模型的概念及基于ActiveMQ的实现案例。该模型中,发布者和订阅者通过消息主题匿名通信,支持多消费者接收消息,存在时间依赖性要求订阅者保持活动状态或建立持久订阅。代码示例展示了Java环境下使用ActiveMQ实现该模式的完整流程:1)消息生产者创建连接并发布消息到指定主题;2)两个消息消费者通过监听器异步接收消息。测试时需先启动订阅者注册监听,后启动发布者发送消息,管理界面可查看订阅状态。这种模式适用于解耦的分布式系统通信场景。(149字)

ywl470812087的博客 12万+

软件需求规格说明书(SRS)标准模板

《软件需求规格说明书(SRS)框架解析》摘要: 本文档系统阐述了SRS的标准结构,包含7大核心部分:1)引言(目的、背景和术语);2)总体描述(产品定位与用户特征);3)功能需求(模块化功能说明);4)非功能需求(性能、安全等指标);5)接口需求(用户/硬件/软件接口);6)其他技术要求;7)附录(图表与参考资料)。重点突出了功能需求模块的标准化描述模板(FR-01),以及安全需求中的HTTPS通信、SHA-256加密等关键指标。该框架为软件开发提供了明确的需求基准,涵盖从业务背景到技术实现的完整链条,是确

moton2017的博客 2877

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ActiveMQ消息模式Queue和Topic机制讲解

ActiveMQ是Apache下的一个开源子项目,实现了JMS(Java Message Service)1.1规范的面向消息(MOM)中间件。它为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ通过消息队列或主题的方式,允许发送者和接收者进行异步通信,从而降低了系统之间的直接依赖,提高了系统的灵活性和可维护性。

u010479989的博客 1657

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ActiveMQ —— Java 连接 ActiveMQ(发布订阅 Topic)

文章目录发布订阅消息传递域中,目的地被称为主题(topic)生产端代码消费端代码启动 ActiveMQ运行程序两种模式的区别两大模式比较 发布订阅消息传递域中,目的地被称为主题(topic) 发布 / 订阅消息传递域的特点如下: (1)生产者将消息发布到 topic 中,每个消息可以有多个消费者,属于 1:N 关系 (2)生产者和消费者之间有时间上的相关性,订阅某一个主题的消费者只能消费 自它订...

Woo_home的博客 7414

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java-199 JMS Queue/Topic 集群下如何避免重复消费:ActiveMQ 虚拟主题与交付语义梳理

Topic 广播带来的重复消费。先梳理两种模式的消费者语义差异,再把交付方式 NON_PERSISTENT 与 PERSISTENT(默认/可靠性/吞吐权衡)串起来,说明“丢消息、重复投递、堆积、DLQ”常见现象如何与 ACK/重试策略对应。重点给出 ActiveMQ Virtual Topic 的工程化解法:生产者发 VirtualTopic.*,消费者以 Consumer.<Group>.VirtualTopic.* 队列方式实现组内抢占、组间全量;同时对照 JMS 2.0 / Jakarta Mess

谢谢你的喜欢 我们一起无限进步 1017

ActiveMQ 使用主题发布消息与两种订阅模式的差异

ActiveMQ 使用主题发布消息: 说明: 生产者将消息发布到topic中,每个消息可以有多个消费者,属于1:N的关系 生产者和消费者有时间关联性,订阅某一个主题的消费者,只能消费他订阅之后的消息 生产者生产消息时,topic 不保存消息它是无状态不落地,假如无人订阅就去生产,那就是一条废消息,所以,一般是先启动消费者,在启动生产者 1.启动 ActiveMQ 服务端 2.创建工程 添加po...

jym的博客 1116

ActiveMQ案例——Topic主题(发布订阅模式)

public class TopicPersistentTest { //编写消息的发送端-----生产者 @Test public void test1() throws Exception{ //创建链接工厂对象 ConnectionFactory connectionFactory = new ActiveMQConnectionFac...

博客 2395

ActiveMQ发布订阅模式(topic模式)

文章目录ActiveMQ发布订阅模式(topic模式)生产者消费者测试运行截图后台查看项目打包 ActiveMQ发布订阅模式(topic模式) 生产者生产一条消息,可以被多个消费者接收一次。 生产者 topic模式,1对多。 package com.cjw.activemq; import javax.jms.DeliveryMode; import javax.jms.JMSExc...

qq_32640013的博客 2130

ActiveMQ--topic

发布/订阅模式(topic) 发布/订阅模式传递域的特点如下: 生产者将消息发布到topic中,每个消息可以有多个消费者,属于1:N的关系。 生产者和消费者之间有时间上的相关性。订阅某一个主题的消费者只能消费自它订阅之后发布的消息。 生产者生产时,topic不保存消息,它是无状态的不落地,假如无人订阅就去生产,那就是一条废消息,所以,一般先启动消费者再启动生产者。 JMS规范允许客户创建持久订...

吴声子夜歌的博客 704

Java实现ActiveMQ之主题的生产者和消费者(二)

前言 假如:三个消费者同时关注并且订阅了一个公众号,公众号同时推送N份消息的时候,他们三个各收到的是N份,还是先到先得到全部,还是均分消息呢? 1、创建maven项目,导入pom.xml依赖包 <!--activemq所需依赖jar配置--> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId>

日常分享工作中的一些技术干货。 724

SpringBoot整合ActiveMQ实现Queue和Topic两种模式

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!/>

2301_79655496的博客 1042

springboot整合activeMQ -- Topic模式

前言 今天和大家分享springboot整合activeMq之topic(主题) - - 发布/订阅模式,类似微信公众号,我们关注公共就可以收到消息,topic需要消费者先订阅才能收到消息,如果没有消费者订阅,生产者产生的消息就是废消息(发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费)。本次实例支持websocket、消息重发、持久化… 版本信息:SpringBoot2.1.5 ...

上善若水滴世界 2129

ActiveMQ中Topic主题

注意: 生产者 本案例中使用的是配置文件中的地址和端口,不要被main方法开头的地方误解了! Topic中持久化的生产者代码Demo: package com.at.activemq.topic; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.io.BufferedI...

Funny_Ma的博客 608
上一篇: 1.1-ActiveMQ队列(Queue)模式下消息生产与消费
下一篇: 1.3-ActiveMQ消息持久化(队列)
sql2008help
博客等级 码龄11年 80粉丝 145原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值