ActiveMQ queue和topic,持久订阅和非持久订阅
消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者)。queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者。在 broker 中,处理 queue 消息和 topic 消息的逻辑是不同的。queue 先存储消息,然后把消息分发给消费者,topic 收到消息的同时,就会分发。
Queue 中有 doMessageSend 和 iterate 方法,doMessageSend 负责接收生产者的消息,iterate 负责分发消息给消费者。Topic 中也有 doMessageSend 和 iterate 方法,doMessageSend 负责接收生产者的消息,并且分发给消费者。
queue 有持久和临时2种类型(topic相同):
队列默认为持久队列,一旦创建,一直存在于broker中。而临时队列被创建后,在connection关闭后,broker就会删除它。
topic 订阅有持久和非持久2种类型:
broker 会把消息全部推送给持久订阅,即便该订阅者中途offline了,如果是非持久订阅,一旦它下线,broker 不会为它保留消息,直到它上线后,开始继续发送消息。
需要注意:假定有一个 topic,生产者向该 topic 发送一条消息,但此时该 topic 没有任何订阅者,则该消息不会保存,它会被删除。
(创建持久订阅)代码示例:
public static void main(String[] args) {
//该连接上会创建durable subscriber,需要指定唯一clientID
ActiveMQConnectionFactory connectionFactory =
new ActiveMQConnectionFactory("tcp://localhost:61616?jms.clientID=10086");
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
connection.start();
ActiveMQSession session = (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建topic
ActiveMQTopic destination = (ActiveMQTopic) session.createTopic("topic_zhang");
//创建持久订阅者
TopicSubscriber consumer = session.createDurableSubscriber(destination, "subscriber_zhang");
//普通消费者,即非持久订阅者
ActiveMQMessageConsumer consumer2 = (ActiveMQMessageConsumer) session.createConsumer(destination);
}
ActiveMQ queue和topic,持久订阅和非持久订阅的更多相关文章
- ActiveMQ Queue vs Topic vs VirtualTopic
之前写过一篇文章讨论VirtualTopic,但觉得不够透彻,这里再根据实验结果进行一次横向对比破除模糊和选择困难症. 文章中核心对比要素是:消息副本和负载均衡 Queue的特点和优势 ActiveM ...
- JMS-activeMq发布订阅模式(非持久订阅)
Publisher的代码: import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Deli ...
- JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...
- JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...
- 【ActiveMQ入门-5】ActiveMQ学习-Queue与Topic的比较
Queue与Topic的比较 1.JMS Queue执行load balancer语义: 一条消息仅能被一个consumer收到. 如果在message发送的时候没有可用的consumer,那么它将被 ...
- ActiveMQ的queue以及topic两种消息处理机制分析
1 queue与topic的技术特点对比 对比项 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状 ...
- activemq安装运行及其在springboot中的queue和topic使用
安装activemq 运行 springboot使用 依赖 配置 Producer Consumer ComsumerTopic 使用 安装activemq http://activemq.apach ...
- SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)
目录 一.前言 二.ActiveMq的下载和使用 三.依赖准备 四.yml文件配置 五.配置Bean 六.创建生产者(Queue+Topic) 七.创建消费者(Topic模式下) 八.测试结果(Top ...
- ActiveMQ——activemq的详细说明,queue、topic的区别(精选)
JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic).主要区别就是是否能重复消费. 点对点:Queue,不可重 ...
随机推荐
- centos7 修改密码
Centos7破解密码的方法 Centos7忘记密码 在工作或者自己练习的时候我们难免会大意忘掉自己的root密码,有些同学忘掉密码竟然第一选择是重装系统,工作中可万万使不得! 本篇博客将讲解 ...
- 动态拼接SQL 语句
public T Get<T>(int id) { Type type = typeof(T); string columnStrings = string.Join(",&qu ...
- Python open 对应的参数
- WebStorm破解方法
http://www.jianshu.com/p/85266fa16639 http://idea.lanyus.com/ webstorm 入门指南 破解方法 1. 下载的WebStorm http ...
- IO模型——IO多路复用机制
(1)I/O多路复用技术通过把多个I/O的阻塞复用到同一个select.poll或epoll的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求.与传统的多线程/多进程模型比,I/O多路复 ...
- java之双缓冲的代码粘贴
private Image offScreenImage = null; public void update(Graphics g) { if(offScreenImage == null) off ...
- Spring的一个入门例子
例子参考于:Spring系列教材 以及<轻量级JavaEE企业应用实战> Axe.class package com.how2java.bean; public class Axe { p ...
- SpringCloud 之 Hystrix熔断器
Hystrix Hystrix请求熔断与服务降级 Hystrix线程隔离&请求缓存&请求合并
- 雷林鹏分享:jQuery EasyUI 表单 - 过滤下拉数据网格
jQuery EasyUI 表单 - 过滤下拉数据网格 下拉数据网格(Combogrid)组件和下拉框(Combobox)组件的共同点是,除了都具有下拉面板以外,它们都是基于数据网格(Datagrid ...
- 恶意代码分析-使用apataDNS+inetsim模拟网络环境
准备工作 虚拟机安装: Win7 Ubuntu apateDNS 密码:wplo inetsim 密码:ghla 客户端Win7需要做的工作 安装apateDNS 服务器端Ubuntu需要做的工作 下 ...