摘要: 七大设计原则 开闭原则 对拓展开放,对修改关闭 单一职责原则 不要存在多余一个导致类变更的原因,类和对象的职责应该单一 依赖倒置原则 高层模块不依赖底层模块,二者都依赖其抽象。抽象不依赖于细节,细节依赖于抽象。(依赖注入) 通过公共的抽象类实现上下层解耦 接口隔离原则 每个接口做成专门化,而不使用单 阅读全文
posted @ 2020-06-13 16:44 挣扎一下 阅读(170) 评论(0) 推荐(0)
摘要: 网络分区的意义 阅读全文
posted @ 2020-06-09 19:36 挣扎一下 阅读(188) 评论(0) 推荐(0)
摘要: 存储机制 持久化的消息和非持久化的消息都可以被写入到磁盘。 持久化的消息一开始就会写入磁盘,如果可以,也会在内存中保存一部分以提高性能,当内存吃紧时会从内存中清楚。 非持久化的消息一般存储在内存中,内存吃紧时会换入到磁盘中,以节省内存空间。 这两种类型的消息的落盘处理都在RabbitMQ的”持久层“ 阅读全文
posted @ 2020-06-09 18:15 挣扎一下 阅读(564) 评论(0) 推荐(0)
摘要: 跨越集群主要两种插件:Federation和Shovel。 原来的rabbitmq集群将多个broker将多个节点连接起来组成逻辑上独立的单个broker,但是集群也有其局限性:集群内部借助 Erlang 进行消息传输,所以 集群中的每个节点的 Erlang cookie 务必要保持一致。同时,集群 阅读全文
posted @ 2020-06-08 23:16 挣扎一下 阅读(351) 评论(0) 推荐(0)
摘要: 前言 掌握好数据结构是我们学习算法的基础。例如基本的数组、链表、二叉树、堆、栈到复杂的图等等。今天我们就来分析一下红黑树是一种怎么样的结构。 基本概念 红黑树是一种自平衡二叉查找树。这里涉及到了几个概念:平衡、二叉、查找。 二叉树:由不同的节点组成,每一个节点有左子节点和右子节点,一个节点最多两个子 阅读全文
posted @ 2020-06-07 10:34 挣扎一下 阅读(210) 评论(0) 推荐(0)
摘要: 保证消息的安全 持久化 交换器持久化:声明交换器时指定持久化 队列持久化:声明队列时指定持久化 消息持久化:发送消息时指定持久化 一般队列和消息持久化要同时声明,此外消息假如进了交换器却找不到队列,也会丢失,必要时添加mandatory参数或者备份交换器。 持久化会降低吞吐量。 消费者确认 订阅队列 阅读全文
posted @ 2020-06-02 10:11 挣扎一下 阅读(202) 评论(0) 推荐(0)
摘要: 建立Connection,创建Channel,注意Channel不能在线程间共享(非线程安全) 创建交换器和队列 消费者消费消息支持推和拉两种模式 推:通过consume方法订阅队列 拉:通过channel.basicGet方法获取消息 一旦consume以后,channel会被置为接收模式,直到取 阅读全文
posted @ 2020-05-27 23:38 挣扎一下 阅读(141) 评论(0) 推荐(0)
摘要: 消息中间件 使用消息中间件的作用 解耦 削峰 异步 顺序保证 冗余(存储) 使用MQ带来的问题 系统的可用性降低 系统的复杂性提高 RabbitMQ的特点 可靠性 灵活的路由 扩展性 高可用 多语言客户端 插件机制 多协议(主要还是AMQP) 相关概念 Producer:生产者,投递消息的一方 Co 阅读全文
posted @ 2020-05-24 09:30 挣扎一下 阅读(152) 评论(0) 推荐(0)
摘要: 由于redis的数据都直接存储在内存里,在服务器发生宕机时内存的数据会瞬间清空,那么必须要有重启时恢复数据的方法。 redis通过持久化机制将数据存储到磁盘中从而在服务器重启时恢复数据,这篇文章主要简介redis的持久化机制。 rdb:rdb是通过快照的方式实现持久化,redis定期将数据集快照写入 阅读全文
posted @ 2020-05-19 22:53 挣扎一下 阅读(180) 评论(0) 推荐(0)
摘要: 将redis用做缓存是一种非常常见的手段,然而由于内存大小的限制,会导致redis在内存空间满了以后需要处理继续存入的数据。总计有以下几种策略: volatile-ttl:在设置了过期时间的数据集里,淘汰离过期时间最近的key。 volatile-random:在设置了过期时间的数据集里,淘汰任意一 阅读全文
posted @ 2020-05-19 22:16 挣扎一下 阅读(1650) 评论(0) 推荐(0)