06 2017 档案

摘要:### 准备 ## 目标 ## 目标 了解 Spring AMQP 消息转化实现 ## 相关资源 Quick Tour for the impatient:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_re 阅读全文
posted @ 2017-06-22 18:38 首夜盲毒预言家 阅读(4235) 评论(0) 推荐(0) 编辑
摘要:### 准备 ## 目标 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理 ## 前置知识 ## 前置知识 ## 前置知识 《Spring AMQP 源码分析 01 - Impatient》 ## 测试代码 同 《Spring AMQP 源码分析 01 阅读全文
posted @ 2017-06-21 20:48 首夜盲毒预言家 阅读(8268) 评论(0) 推荐(0) 编辑
摘要:### 准备 ## 目标 ## 目标 了解 Spring AMQP 核心代码 ## 前置知识 RabbitMQ 入门 ## 相关资源 Quick Tour for the impatient:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/ 阅读全文
posted @ 2017-06-19 23:59 首夜盲毒预言家 阅读(3422) 评论(0) 推荐(0) 编辑
摘要:参考资料: A. 核心概念 Virtual Host:虚拟主机为 RabbitMQ 中的资源提供了逻辑分组与隔离 资源:资源是虚拟主机中的实体,例如队列和交换机。不同虚拟主机中的同名实体是不同的资源 B. Rabbit 访问控制基本流程 当客户端尝试建立到 RabbitMQ 的连接时,必须指定虚拟主 阅读全文
posted @ 2017-06-13 17:50 首夜盲毒预言家 阅读(822) 评论(0) 推荐(0) 编辑
摘要:参考资料: A. Policies 的用途 RabbitMQ 有很多可选参数(x arguments),这些参数由客户端提供,决定是否使用各种可选特性,例如 TTL 和队列长度限制等。 由客户端设定这些参数导致对这些参数的修改需要修改代码、重部署项目、重新创建队列。同时,我们也没法给一组队列或者交换 阅读全文
posted @ 2017-06-12 16:20 首夜盲毒预言家 阅读(1653) 评论(0) 推荐(0) 编辑
摘要:参考资料: 默认情况下,队列中的消息是不持久化的。如果 RabbitMQ 崩溃,队列中的消息就全部消失了。 为了防止 RabbitMQ 重启导致的消息丢失,我们需要对消息持久化,将消息保存在物理存储介质中。 RabbitMQ 实现消息持久化需要: 1\. 消息所在的队列必须设置为 durable 2 阅读全文
posted @ 2017-06-12 14:19 首夜盲毒预言家 阅读(594) 评论(0) 推荐(0) 编辑
摘要:参考资料: 通过 ack 机制,我们可以确保队列中的消息一定能被消费到。那我们有办法保证消息发布方一定把消息发送到队列了吗? 遵照 AMQP 协议,RabbitMQ 提供了事务机制可以确保发布方消息必达。但是吞吐量会降为越来的 1/250,这个性能损耗是无法接受的。 好在 RabbitMQ 提供了类 阅读全文
posted @ 2017-06-10 17:05 首夜盲毒预言家 阅读(744) 评论(1) 推荐(0) 编辑
摘要:参考资料: 队列中的消息可能会成为死信消息(dead lettered)。让消息成为死信消息的事件有: 消息被取消确认(nack 或 reject),且设置为不重入队列(requeue = false) 消息TTL过期 队列达到长度限制 死信消息会被死信交换机(Dead Letter Exchang 阅读全文
posted @ 2017-06-10 15:46 首夜盲毒预言家 阅读(858) 评论(0) 推荐(0) 编辑
摘要:参考资料: RabbitMQ 有两种方式限制队列长度,第一种是对队列中消息总数进行限制: gordon.study.rabbitmq.features.TestQueueLengthLimit.java Map args = new HashMap(); args.put("x max length 阅读全文
posted @ 2017-06-10 13:55 首夜盲毒预言家 阅读(4461) 评论(0) 推荐(1) 编辑
摘要:参考资料: A. 为队列设置消息TTL TTL 是 Time To Live 的缩写,指的是存活时间。RabbitMQ 可以为每一个队列设置其内部消息的 TTL。 gordon.study.rabbitmq.ttl.TestPerQueueMsgTtl 如上,只要给队列设置 x message tt 阅读全文
posted @ 2017-06-06 21:39 首夜盲毒预言家 阅读(787) 评论(0) 推荐(0) 编辑
摘要:A. JMS 模型 JMS 中定义了点对点和发布订阅两种消息模型,原来以为 AMQP 协议中 direct Exchange 对应点对点模型,topic Exchange 对应发布订阅模型,fanout Exchange 对应简化的发布订阅模型。可学习下来,发现根本不是那么一回事。 实际上,用三种 阅读全文
posted @ 2017-06-06 20:07 首夜盲毒预言家 阅读(3816) 评论(0) 推荐(0) 编辑
摘要:A. 用广播的方式实现发布订阅 参考资料: Fanout 类型的 Exchange 以广播的方式向所有绑定到该 Exchange 的队列推送消息。 下面样例代码试图使用 fanout 将状态变更消息推送给所有接入系统: gordon.study.rabbitmq.fanout.Fanout.java 阅读全文
posted @ 2017-06-06 19:45 首夜盲毒预言家 阅读(2478) 评论(0) 推荐(0) 编辑
摘要:A. Delivery Tag 参考资料: 仔细查看一下 Consumer 的回调方法: 当我们需要确认一条消息已经被消费时,我们调用的 basicAck 方法的第一个参数是 Delivery Tag。 Delivery Tag 用来标识信道中投递的消息。RabbitMQ 推送消息给 Consume 阅读全文
posted @ 2017-06-06 18:13 首夜盲毒预言家 阅读(14822) 评论(2) 推荐(4) 编辑
摘要:A. 多线程消费同一队列 参考资料: 消费一条消息往往比产生一条消息慢很多,为了防止消息积压,一般需要开启多个工作线程同时消费消息。在 RabbitMQ 中,我们可以创建多个 Consumer 消费同一队列。示意图如下: gordon.study.rabbitmq.workqueue.Sender. 阅读全文
posted @ 2017-06-04 20:14 首夜盲毒预言家 阅读(29774) 评论(3) 推荐(2) 编辑
摘要:如果你比较细心,你会发现 HelloWorld 例子中的 Sender 只申明了一个 hello 队列,然后就开始向默认 Exchange 发送路由键为 hello 的消息。按照之前 AMQP 基本概念介绍,消息到了 Exchange 后需要按照 Binding 提供的分发依据将消息分发到队列中。那 阅读全文
posted @ 2017-06-04 16:53 首夜盲毒预言家 阅读(1398) 评论(0) 推荐(0) 编辑
摘要:我们知道,消费者有两种方式从消息中间件获取消息: 推模式:消息中间件主动将消息推送给消费者 拉模式:消费者主动从消息中间件拉取消息 推模式将消息提前推送给消费者,消费者必须设置一个缓冲区缓存这些消息。好处很明显,消费者总是有一堆在内存中待处理的消息,所以效率高。缺点是缓冲区可能会溢出。 拉模式在消费 阅读全文
posted @ 2017-06-04 01:26 首夜盲毒预言家 阅读(7381) 评论(1) 推荐(2) 编辑
摘要:A. AMQP基础 RabbitMQ 并不是基于 Java 开发人员熟悉的 JMS 规范设计开发的,而是基于一个比 JMS 更新更合理的 AMQP (Advanced Message Queuing Protocol) 协议。所以,在开始 RabbitMQ 之旅前,需要先对 AMQP 有一定的了解。 阅读全文
posted @ 2017-06-04 01:21 首夜盲毒预言家 阅读(1454) 评论(0) 推荐(0) 编辑
摘要:A. 资源与参考文档 官网:https://www.rabbitmq.com/ B. 学习目的 部门目前使用其他部门维护的 WebLogic 的 JMS 消息服务,缺乏足够的技术支持与运维支持。随着基于 Spring Cloud 的微服务化改造的启动与团队技术能力提升,服务内部与服务之间将会更加依赖 阅读全文
posted @ 2017-06-03 17:05 首夜盲毒预言家 阅读(904) 评论(2) 推荐(2) 编辑