一句话总结: VirtualTopic是为了解决持久化模式下多消费端同时接收同一条消息的问题。
 
想象这样一个场景:
 
生产端产生了一笔订单,作为消息MessageOrder发了出去。
这笔订单既要入订单系统归档,又要入结算系统收款,那怎么办呢?
 
现在分析该消息的需求:
 
持久化:订单很重要,丢了可不行
同时接收:既要归档,又要结算
生产端只需向一个Destination发送:一把钥匙开一把锁,保持发送的一致性,否则容易乱套
 
方案A: 使用Topic订阅模式,虽然满足1对多同时接收,然而持久化模式下只能有一个持有clientID的消费者连接,不满足持久化需求
方案B: 使用单队列,队列是1对1模式,消息只能给一个消费者,不满足同时接收的需求
方案C: 使用多队列,显然生产者不太愿意一条消息发送很多次,分别发送给不同的队列,万一队列A发送成功,队列B发送失败怎么办?一致性无法保证,容易乱套
 
所以,JMS现有规范无法解决这个问题,于是,ActiveMQ使用VirtualTopic作为JMS规范的补充登场。
 
那VirtualTopic如何同时满足上述需求呢?
 
简单说来,就是将Topic和Queue相结合,各取所长。
 
在方案C中,我们发现使用多队列可以满足持久化和同时接收两个需求,但意味着生产者要发送消息给多个队列,一致性不好,那既然生产者不想分发,那么由Broker来分发可好?
 
VirtualTopic就是这样一种存在,对生产者而言它是Topic,对消费者而言它是Queue,内部的处理机制就是由Broker将接收到的消息二次分发给每一个Queue,然后由不同的Queue对应不同的应用实现持久化,不同的消费端只关心并连接到自己的Queue接收消息即可。
 
现在来复盘开始提出的场景:

显然,三个需求都得到了解决。
 
总结一下:
1. 虚拟Topic是一种特殊命名的Topic,系统根据命名规则将该Topic内的消息分发给当前存在的名称对应的Queue,分发是非持久化的,新加入的Queue是接收不到过去的消息的。
2. 虚拟Topic还是Topic,不是什么新的存在,具有普通Topic的所有功能,只是名字特殊而已。
3. 虚拟Topic的功能完全是中间件本身额外附加的机制,对于生产者和消费者都是无感知的。
4. 对于运维人员来说,还是正常监控队列即可,虚拟Topic是非持久化的,不存在积压。
 

 

ActiveMQ之VirtualTopic是什么?的更多相关文章

  1. ActiveMQ高级特性

    一.常用配置属性 以下配置文件目录均为:${activemq_home}/conf/activemq.xml 1.定期扫描清理 ActiveMQ中有一项功能:Delete Inactive Desti ...

  2. MQ 入门实践

    MQ Message Queue,消息队列,FIFO 结构. 例如电商平台,在用户支付订单后执行对应的操作: 优点: 异步 削峰 解耦 缺点 增加系统复杂性 数据一致性 可用性 JMS Java Me ...

  3. ActiveMQ VirtualTopic

    参考网址: http://activemq.apache.org/virtual-destinations.html http://blog.csdn.net/kimmking/article/det ...

  4. ActiveMQ Queue vs Topic vs VirtualTopic

    之前写过一篇文章讨论VirtualTopic,但觉得不够透彻,这里再根据实验结果进行一次横向对比破除模糊和选择困难症. 文章中核心对比要素是:消息副本和负载均衡 Queue的特点和优势 ActiveM ...

  5. MQ学习(二)----ActiveMQ简介(转)

    1.  什么是ActiveMQ ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用A ...

  6. ActiveMQ in Action(6) - Features

    关键字: activemq 2.6 Features    ActiveMQ包含了很多功能强大的特性,下面简要介绍其中的几个.2.6.1 Exclusive Consumer    Queue中的消息 ...

  7. 【转】ActiveMQ与虚拟通道

    郑重提示,本文转载自http://shift-alt-ctrl.iteye.com/blog/2065436 ActiveMQ提供了虚拟通道的特性(Virtual Destination),它允许一个 ...

  8. ActiveMQ的Destination高级特性

    1.    Composite Destinations  组合目的地 组合队列Composite Destinations : 允许用一个虚拟的destination代表多个destinations ...

  9. ActiveMQ消息的消费原理

    消费端消费消息: 在 初识ActiveMQ 中我提到过,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法.另一种是使用消息监听器Messag ...

随机推荐

  1. BZOJ 3224 普通平衡树 | 平衡树模板

    #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...

  2. 【转】关于在vim中的查找和替换

    1,查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的 ...

  3. 洛谷 P3171 [CQOI2015]网络吞吐量 解题报告

    P3171 [CQOI2015]网络吞吐量 题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最 ...

  4. NetApp存储方案及巡检命令

    一.MCC概述 Clustered Metro Cluster(简称MCC)是Netapp Data Ontap提供的存储双活解决方案,当初的方案是把1个FAS/ V系列双控在数据中心之间拉远形成异地 ...

  5. 一次绕过防火墙获取RCE以及提权到root权限的渗透过程

    本文是关于Apache struts2 CVE-2013-2251是由于导致执行远程命令的影响而被高度利用的漏洞.简而言之, 通过操纵以“action:”/”redirect:”/”redirectA ...

  6. luoguP2123 皇后游戏——微扰法的应用与排序传递性的证明

    题目背景 还记得 NOIP 2012 提高组 Day1 的国王游戏吗?时光飞逝,光阴荏苒,两年 过去了.国王游戏早已过时,如今已被皇后游戏取代,请你来解决类似于国王游 戏的另一个问题. 题目描述 皇后 ...

  7. SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 D. 白色相簿

    从某一点开始,以层次遍历的方式建树若三点a.b.c互相连接,首先必先经过其中一点a,然后a可以拓展b.c两点,b.c两点的高度是相同的,若b(c)拓展时找到高度与之相同的点,则存在三点互相连接 //等 ...

  8. beego 返回 json 响应

    需要注意的是 json 结构体里面的字段必须是大写字母开头,否则是不会返回的. 我们可以起个别名: type person struct { Name string `json:"name& ...

  9. opencv图片右转函数

    因为需要将函数进行右转,发现opencv自带 的过于麻烦.自己写了个右转的.可以根据这个想法写出任何方向的 //函数功能,右转图片 IplImage* convertImage(IplImage* i ...

  10. Jenkins和Gitblit集成实现提交后自动构建

    Gitblit是一个纯Java基于git的解决方案.它属于Apache Allura等伪造软件之一,它将票务系统与web ui结合在一起.我经历了一个设置过程,我想我可以帮助新用户避免痛点. 使用场景 ...