mq topic持久化订阅者(topic、queue的producer.setDeliveryMode(DeliveryMode. PERSISTENT)是指的mq服务),queue的消费者不在也会给

2023-10-30

mq topic持久化订阅者(topic、queue的producer.setDeliveryMode(DeliveryMode. PERSISTENT)是指的mq服务),queue的消费者不在也会给他保留,topic只有持久化订阅者会保留

 

(1)使用queue,即队列时,每个消息只有一个消费者,所以,持久化很简单,只要保存到数据库即可

。然后,随便一个消费者取走处理即可。某个消费者关掉一阵子,也无所谓。

(2)使用topic,即订阅时,每个消息可以有多个消费者,就麻烦一些。

首先,假设消费者都是普通的消费者,
------------------------
<1>activemq启动后,发布消息1,可惜,现在没有消费者启动着,也就是没有消费者进行了订阅。那么

,这个消息就被抛弃了。

<2>消费者1启动了,连接了activemq,进行了订阅,在等待消息~~

activemq发布消息2,OK,消费者1收到,并进行处理。消息抛弃。

<3>消费者2也启动了,连接了activemq,进行了订阅,在等待消息~~

activemq发布消息3,OK,消费者1,消费者2都收到,并进行处理。消息抛弃。

<4>消费者1关掉了。

activemq发布消息4,OK,消费者2收到,并进行处理。消息抛弃。

<5>消费者1又启动了。

activemq发布消息5,OK,消费者1,消费者2都收到,并进行处理。消息抛弃。
-----------------------------
总结一下:
activemq只是向当前启动的消费者发送消息。
关掉的消费者,会错过很多消息,并无法再次接收这些消息。

如果发送的消息是重要的用户同步数据,错过了,用户数据就不同步了。

那么,如何让消费者重新启动时,接收到错过的消息呢?

答案是持久订阅。

(3)普通的订阅,不区分消费者,场地里有几个人头,就扔几个馒头。
持久订阅,就要记录消费者的名字了。
张三说,我是张三,有馒头给我留着,我回来拿。
李四说,我是李四,有馒头给我留着,我回来拿。
activemq就记下张三,李四两个名字。

那么,分馒头时,还是一个人头给一个馒头。
分完了,一看张三没说话,说明他不在,给他留一个。
李四说话了,那就不用留了。

张三回来了,找activemq,一看,这不张三吧,快把他的馒头拿来。
可能是一个馒头,也可能是100个馒头,就看张三离开这阵子,分了多少次馒头了。

activemq区分消费者,是通过clientID和订户名称来区分的。


// 创建connection
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); //持久订阅需要设置这个。
connection.start();

// 创建session
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

// 创建destination
Topic topic = session.createTopic("userSyncTopic"); //Topic名称

//MessageConsumer consumer = session.createConsumer(topic); //普通订阅
MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); //持久订阅



(4)还有一点,消息的生产者,发送消息时用使用持久模式
MessageProducer producer = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
不设置,默认就是持久的

(5)使用相同的“clientID”,则认为是同一个消费者。两个程序使用相同的“clientID”,则同时只能有一个连接到activemq,第二个连接的会报错。

(6)activemq的设置在conf/activemq.xml中,默认消息是保存在data/kahadb中,重启activemq消息不会丢。

可以访问 http://localhost:8161/admin/index.jsp
查看当前的队列、Topic和持久订户的信息、发送消息等等,很方便。

可以复制activemq-jdbc.xml中的内容过来,修改一下,就可以把消息保存在其它数据库中了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mq topic持久化订阅者(topic、queue的producer.setDeliveryMode(DeliveryMode. PERSISTENT)是指的mq服务),queue的消费者不在也会给 的相关文章

  • 《消息队列高手课》该如何选择消息队列

    作为一个程序员 相信你一定听过 没有银弹 这个说法 这里面的银弹是指能轻松杀死狼人 用白银做的子弹 什么意思呢 我对这句话的理解是说 在软件工程中 不存在像 银弹 这样可以解决一切问题的设计 架构或软件 每一个软件系统 它都是独一无二的 你
  • 如何保证消息队列的顺序性?

    面试题 如何保证消息的顺序性 面试官心理分析 其实这个也是用 MQ 的时候必问的话题 第一看看你了不了解顺序这个事儿 第二看看你有没有办法保证消息是有顺序的 这是生产系统中常见的问题 面试题剖析 我举个例子 我们以前做过一个 mysql b
  • 选Redis做MQ的人,是脑子里缺根弦儿吗?

    V xin ruyuan0330 获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 unack消息的积压问题 三 如何解决unack消息的积压问题 四 高并发场景下的内存溢出问题 五 低吞吐量问题 六 合理设置prefetch
  • RabbitMQ与KafKa区别

    在应用场景方面 RabbitMQ 遵循AMQP协议 由内在高并发的erlanng语言开发 用在实时的对可靠性要求比较高的消息传递上 kafka是Linkedin于2010年12月份开源的消息发布订阅系统 它主要用于处理活跃的流式数据 大数据
  • RocketMQ rocketmq_client.log日志文件配置

    1 默认路径 项目添加RocketMQ以后启动项目时会在user home下创建一个rocketmq client log日志文件 文件全路径是 user home logs rocketmqlogs rocketmq client log
  • redis 管道(pipeline),深入解读

    文章目录 前言 一 动手试试 1 对比 2 请求 二 原理 1 模式 2 服务端 3 客户端 3 1 redisson 3 2 jedis 3 3 lettuce 总结 前言 本文源码参考版本 redis 6 2 redisson 3 17
  • rocketmq安装、启动

    1 下载 gt wget http mirror bit edu cn apache rocketmq 4 4 0 rocketmq all 4 4 0 source release zip gt unzip rocketmq all 4
  • RabbitMQ优秀博文整理

    1 关于主流MQ的介绍 各MQ的优缺点 MQ的使用选举等 MQ消息队列详解 四大MQ的优缺点分析 从百草园杀到三味书屋 的博客 CSDN博客 几种消息队列的优缺点 2 RabbitMQ常见问题的整理 以及解决思路 图文并茂 比较详细 Rab
  • 消息队列的两种模式

    Java消息服务 Java Message Service JMS 应用程序接口是一个Java平台中关于面向消息中间件 MOM 的API 用于在两个应用程序之间 或分布式系统中发送消息 进行异步通信 点对点与发布订阅最初是由JMS定义的 这
  • RocketMQ-名词和架构

    RocketMQ rocketMQ是做什么的我就不用解释了吧 以及他的背景 本文主要是为了让大家明白RocketMQ的工作原理 架构图 上图 双箭头代表是双向通信 ProducerGroup和ConsumerGroup以及Broker集群
  • java.lang.NoClassDefFoundError: org/springframework/context/event/EventListenerFactory

    集成rabbitmq的时候报错 只要看到NoClassDefFoundError基本都是jira包冲突了 1 首先找到相关类 spring tx有2个版本 2 利用IDEAL插件mavenhelper看一下 把高版本排除掉就可以了 java
  • rocketmq客户端配置

    1 客户端配置 相对于RocketMQ的Broker集群 生产者和消费者都是客户端 2 客户端寻址方式 RocketMQ可以令客户端找到Name Server 然后通过Name Server再找到Broker 如下所示有多种配置方式 优先级
  • 事务提交后发送MQ消息

    前言 本文主要介绍关于MQ使用过程中 通过场景分析为什么要使用事务控制 以及事务如何实现 场景分析 为什么我们在使用MQ的时候需要考虑结合事务 试想一下 我们平时使用Mq发送消息的通用场景是不是 生产者和MQ集群建立连接 并发送消息 消费者
  • Kafka原理分析

    在基础篇中我们介绍MQ的一些基础原理 这篇文章 我们针对kafka进行较深入的分析 上篇文章中我们提到了kafka中一个名词broker 其实broker可以理解成为一台kafa服务器 kafka的特性和功能 在kafka设计之初是为了实时
  • rabbitmq消费者启动报队列未找到

    使用的是spring rabbitmq 启动tomcate报错 消费这队列找不到 如果队列不存在消费者会自动创建的 Caused by org springframework amqp AmqpIllegalStateException F
  • RocketMQ报No route info of this topic

    最近某天突然收到报警邮件 线上某个应用发送MQ消息报错 完整异常栈如下 2018 04 08 18 17 44 126 DubboServerHandler 10 141 6 116 20968 thread 172 ERROR com x
  • 队列管理器和消息代理之间的区别

    Websphere Message Broker 和队列管理器之间有什么区别 我猜队列管理器将消息放入队列 从队列中取出消息 将消息移动到回退队列等 那么代理的工作是什么 它位于发布者和队列管理器之间还是消费者和队列管理器之间 Websph
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • Java EE 容器中的同步请求-应答模式

    我希望在 Java EE 容器内使用 JMS 实现同步请求 答复模式 顺序会是这样的 浏览器向 Web 应用程序发出数据请求 这是一个阻塞请求 比如在线程 T1 上 Web 应用程序需要连接到远程 Web 服务才能满足上述请求 因此 它形成
  • com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”

    JMS 应用程序需要七个参数才能与此处给出的 MQ 系列成功建立 SSL 连接 https github com ibm messaging mq tls ssl wizard blob master com ibm mq ssl wiza

随机推荐

  • Vue之父子组件通信(一)

    1 父组件向子组件传递数据 父组件向子组件传值 1 父组件调用子组件的时候 绑定动态属性
  • ST-Bluenrg-lp芯片编程因为地址重叠导致常量值被更改

    所遇问题 定义的结构体 用于限制范围大小 类似于 struct test SysParaMax test1 5000 test2 5000 test3 100 test4 600 struct test SysParaMin test1 0
  • intellij idea tomcat permGen space

    vmsettings options are Xms128m Xmx700m XX MaxPermSize 250m XX ReservedCodeCacheSize 64m tomcat are Xms64m Xmx256m
  • cin读取数字时遇到字符的情况

    cin读取数字时遇到字符 当定义一个int变量 用cin输入时 如果输入的是一个字符 会发生以下4中情况 1 n的值变成0 2 不匹配的输入被留在输入流中 3 cin对象的一个错误标记被设置 即cin fail 返回true 4 对cin的
  • SpringBoot项目用 jQuery webcam plugin实现调用摄像头拍照并保存图片

    参考博客 http www voidcn com article p oigngyvb kv html 自定义样式
  • TestNG测试用例

    使用TestNG的第一个测试用例 要遵循的步骤 1 按Ctrl N 在TestNG类别下选择 TestNG Class 然后单击Next 要么 右键单击Test Case文件夹 转到TestNG并选择 TestNG Class 2 如果您的
  • 考研/面试 数据结构大题必会代码(理解+记忆,实现使用C++,STL库)

    文章目录 一 线性表 1 逆置顺序表所有元素 2 删除线性链表中数据域为 item 的所有结点 3 逆转线性链表 递归 快速解题 非递归 4 复制线性链表 递归 5 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表 二 树 1
  • 门面模式

    门面模式是对象的结构模式 外部与一个子系统的通信必须通过一个统一的门面对象进行 门面模式提供一个高层次的接口 使得子系统更易于使用 门面模式有三个角色组成 1 门面角色 facade 这是门面模式的核心 它被客户角色调用 因此它熟悉子系统的
  • DVWA靶场--文件上传/包含(low-high).

    文件上传 low 没有做任何过滤直接上传即可 medium 源码 uploaded type image jpeg uploaded type image png 这段源码可以看出来他对上传到content type值做了过滤 只允许上传这
  • 分享如何建立一个完美的 Python 项目

    当开始一个新的 Python 项目时 大家很容易一头扎进去就开始编码 其实花一点时间选择优秀的库 将为以后的开发节省大量时间 并带来更快乐的编码体验 在理想世界中 所有开发人员的关系是相互依赖和关联的 协作开发 代码要有完美的格式 没有低级
  • 小程序`canvasToTempFilePath:fail:cearte bitmap failed?`

    这个方法的思路来源链接 微信开放社区 主要是通过延迟 重试 以及画质来解决手机性能等问题导致的canvasToImageFile故障 代码仅供参考 欢迎大家提供更多方法或思路 或指出代码异常 谢谢 下面是我用到项目中的代码片段 海报信息 P
  • PID算法的理论分析

    PID算法的理论和应用 PID算法基本原理 PID算法的离散化 PID算法伪代码 PID算法C 实现 pid cpp pid h pid example cpp Python代码 仿真结果 PID算法基本原理 PID算法是控制行业最经典 最
  • webbench剖析

    webbench 其为linux上一款web性能压力测试工具 它最多可以模拟3万个并发连接数来测试服务器压力 其原理为fork多个子进程 每个子进程都循环做web访问测试 子进程将访问的结果通过管道告诉父进程 父进程做最终结果统计 其主要原
  • javaweb 之 JDBC 详解 数据库连接池

    JDBC简介 JDBC 就是使用Java语言操作关系型数据库的一套API 全称 Java DataBase Connectivity Java 数据库连接 JDBC 本质 官方 sun公司 定义的一套操作所有关系型数据库的规则 即接口 各个
  • 基于深度学习的花卉图像关键点检测

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 在本文中 我们描述了我们如何使用卷积神经网络 CNN 来估计花卉图像中关键点的位置 并且在 3D 模型上渲染这些图像上茎和花的位置等关键点 为了能够与真实花束的照片对比
  • C语言数码管全熄,各位大神,如何用C语言实现在数码管上实现1234同时亮

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 将移位寄存器内的数据锁存到输出寄存器并显示 void OUT 595 void RCK 595 0 nop nop
  • Linux下tar命令解压到指定的目录

    文章转自 http blog sina com cn s blog 62449fcf0100nfar html 版权归原作者 Linux下tar命令解压到指定的目录 tar zxvf bbs tar zip C zzz bbs 把根目录下的
  • POJ 2479 Dual Core CPU|网络流|dinic模版

    问题描述 总时间限制 15000ms 单个测试点时间限制 5000ms 内存限制 65536kB 描述 As more and more computers are equipped with dual core CPU SetagLilb
  • AI实战训练营&MMDetection安装配置指南

    AI实战训练营 MMDetection安装配置指南 一 MMDetection简介 版本迭代变化 2 0 3 0 二 环境检测和安装 三 准备数据集 四 自定义配置文件 一 MMDetection简介 MMDetection 是被广泛使用的
  • mq topic持久化订阅者(topic、queue的producer.setDeliveryMode(DeliveryMode. PERSISTENT)是指的mq服务),queue的消费者不在也会给

    mq topic持久化订阅者 topic queue的producer setDeliveryMode DeliveryMode PERSISTENT 是指的mq服务 queue的消费者不在也会给他保留 topic只有持久化订阅者会保留 1