
java
文章平均质量分 61
yankunhaha
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
spring代理类实现多service路由
接口public interface HelloService { /** * 返回true表示使用这个实现类来执行 */ default boolean match(String s) { return false; } String sayHello();}两个实现类@Servicepublic class HeyHelloServiceImpl implements HelloService { @Overr原创 2020-11-06 17:47:27 · 411 阅读 · 0 评论 -
那些我不知道的spring注解
@ConditionalOnMissingBean该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean原创 2020-10-14 21:40:43 · 110 阅读 · 0 评论 -
RocketMQ消息消费六:消息过滤
概述RocketMQ的消息过滤分为两种:表达式过滤和类过滤。表达式过滤针对消息的属性过滤,适合于简单的场景,类过滤可以实现复杂的逻辑。表达式过滤表达式过滤分为tag过滤和SQL92过滤。SQL92在这里不展开描述,只介绍下tag过滤。在客户端发送消息的时候可以指定消息的tag,并根据消息的tag生成哈希值,为tagcode,存储在CommitLog中。所以tag过滤分为两部分:拉取过滤和消费过滤,分别发生在broker端和消费端。拉取过滤消费者过滤规则存储消费者订阅消费组时,将消息的过滤保存,原创 2020-05-24 11:41:25 · 1382 阅读 · 1 评论 -
RocketMQ源码学习-NameServer
系列文章总目录前言NameServer,用来提供服务发现和服务治理功能。RocketMQ中的NameServer是一个无状态的服务,可以有多个节点,各个节点之间不进行通信,Broker、Client跟所有的NameServer通信。NameServer的功能如下:维护Broker信息。每个Broker启动后向NameServer注册,NameServer保存活跃的Broker列表,包括Ma...原创 2018-12-12 19:04:51 · 335 阅读 · 0 评论 -
RocketMQ源码学习-普通消息发送
系列文章总目录本文介绍普通消息的发送过程,事务消息在后面陈述。发送消息入口在测试代码中,DefaultMQProducerTest提供了消息发送的测试用例,可以看到,消息的发送由DefaultMQProducer完成,提供了多种发送入口,最终在DefaultMQProducerImpl.sendDefaultImpl进行。sendDefaultImpl参数介绍private SendRe...原创 2018-12-31 18:04:53 · 268 阅读 · 0 评论 -
java8 lambda demo
前置对象@Datapublic class Book { // 书名 private String name; // 页数 private int pages; // 作者 private String auther; // 总字数 private int wordCounts; // 版次日期 private ...原创 2019-04-21 20:11:19 · 321 阅读 · 0 评论 -
java nio随笔
Buffer类容量(capacity)容纳元素的最大数量,在缓冲区创建时被设定并且不能更改上界(limit)缓冲区第一个不能被读或者写的位置位置(position)下一个要被读或者写的位置标记(mark)备忘标记。调用mark()来设定mark=position,调用reset()设定position=mark满足 0 <= mark <= position <= ...原创 2019-04-27 15:31:47 · 139 阅读 · 0 评论 -
RocketMQ消息存储二:数据文件存组件储层
数据文件存储组件层只有一个类DefaultMessageStore,它负责所有存储相关的工作,上层业务中的消息发送处理、查询处理、拉取处理,最终都委托给DefaultMessageStore操作。核心属性 // 存储配置 private final MessageStoreConfig messageStoreConfig; // CommitLog原始消息存储 ...原创 2019-07-17 20:10:00 · 1971 阅读 · 1 评论 -
RocketMQ消息存储六:文件内存映射对象层MappedFile
概述这一层包含MappedFileQueue、MappedFile、MappedByteBuffer,其中MappedFileQueue在介绍CommitLog的时候已经讲过了,可以参考CommitLog。MappedFile对应着磁盘上的存储文件,同时也是MappedByteBuffer的封装,消息存储跟磁盘、内存的交互都是通过它完成。属性介绍 // 默认页大小 public...原创 2019-07-25 08:42:56 · 2989 阅读 · 0 评论 -
RocketMQ消息存储三:逻辑对象层CommitLog
概述CommitLog中存储了消息的完整信息,所有topic的消息都存储在一个CommitLog中。下面讲一下CommitLog的存储格式和存储过程存储文件信息CommtLog的存储其实是分多层的,CommitLog -> MappedFileQueue -> MappedFile,其中真正存储数据的是MappedFile。CommitLog存储目录为$HOME\store\co...原创 2019-07-21 13:41:39 · 2375 阅读 · 1 评论 -
RocketMQ消息存储四:逻辑对象层ConsumeQueue
概述ConsumeQueue存储逻辑消费队列,每个ConsumeQueue对应一个topic的一个queue。存储文件信息ConsumeQueue与CommtLog一样,也包含MappedFileQueu。ConsumeQueue存储目录为HOME/store/consumequeue/HOME/store/consumequeue/HOME/store/consumequeue/{topi...原创 2019-07-21 15:39:18 · 1198 阅读 · 0 评论 -
RocketMQ消息存储五:逻辑对象层IndexFile
概述IndexFile存储消息的索引信息,可以根据key进行查找。存储文件信息存储目录为HOME/store/index/,每个文件大小为420000040字节。文件名字为创建时的时间戳。IndexFile格式可以把IndexFile理解为哈希表。IndexFile解决冲突的方式是拉链,即把哈希值相同的数据存到链表中。如果在内存中,数据结构应该是一个slot数组,对象类型为index的一...原创 2019-07-23 08:07:13 · 513 阅读 · 0 评论 -
RocketMQ消息消费二:长轮询
概述前面提到了,RocketMQ没有真正实现push模式消费,而是通过pull来实现。为了提高性能,未拉取到消息时,并不会返回消息未找到,而是将拉取请求挂起,直到有消息到来被唤醒或者超时。轮询分类分为长轮询和短轮询。短轮询1s,长轮询push模式为15s,pull模式为20s。轮询触发逻辑在 PullMessageProcessor.processRequest() 中 ...原创 2019-08-10 16:19:56 · 896 阅读 · 0 评论 -
RocketMQ消息消费三:负载均衡
概述这篇文章介绍RocketMQ消费消息的负载均衡策略。因为消费消息的方式push&pull实际上均由pull模式实现,所以具体负载均衡是在客户端完成的。核心类—RebalanceImpl在Consumer启动的过程中会完成RebalanceService启动,每20s执行一次,最终调用RebalanceImpl来实现。RebalanceImpl为抽象类,子类有RebalancePu...原创 2019-08-25 09:55:13 · 1063 阅读 · 0 评论 -
RocketMQ消息消费四:消费进度offset存储
概述消息消费完成后,需要将消费进度存储起来,即前面提到的offset。广播模式下,同消费组的消费者相互独立,消费进度要单独存储;集群模式下,同一条消息只会被同一个消费组消费一次,消费进度会参与到负载均衡中,故消费进度是需要共享的。消费进度相关类OffsetStore为统一的消费进度接口,定义了操作入口public interface OffsetStore { /** ...原创 2019-08-25 11:23:39 · 9045 阅读 · 2 评论 -
RocketMQ消息消费五:延迟消息
概述延迟消息也叫定时消息,是指需要在一段时间后被消费的消息。考虑这种场景:用户下单后10分钟后不付款将订单取消,可以在用户下单后发送延迟消息,延迟10分钟检查订单如果未支付则取消订单。RocketMQ本身的commitLog采用顺序存储消息的方式,如果在commitLog实现延迟消息,需要对commitLog排序等处理,这与RocketMQ的设计理念不合。故RocketMQ针对延迟消息,只支持特...原创 2019-08-25 21:44:56 · 5295 阅读 · 1 评论 -
RocketMQ源码学习-通信与协议
系列文章总目录从github clone 最新源码,结构如下:本篇文章要讲的通信与协议部分的源代码在remoting模块下。remoting模块是复杂网络通信的模块,为其他需要网络通信的模块所依赖。在这个模块中,RocketMQ定义了基础的通信协议,结合Netty,使得端与端之间的数据交互变得统一而高效。基本类图先来看这个模块的类关系图:针对每个类分别做解释:RemotingServ...原创 2018-11-20 21:27:46 · 953 阅读 · 0 评论 -
RocketMQ-快速上手
总目录总纲环境依赖JDK 1.8+maven下载二进制包地址:http://rocketmq.apache.org/release_notes/release-notes-4.3.2/下载完成后,解压到自己指定的目录,如 /Users/root/usr/rocketmq配置环境变量增加如下:export ROCKETMQ_HOME=/Users/root/usr/rocketm...原创 2018-11-20 17:52:28 · 400 阅读 · 0 评论 -
RocketMQ源码学习-总纲
总纲RocketMQ相关的介绍在这里就不做赘述了,详细请参见apache官方主页 和 github。源码学习总结基于4.4.0-SNAPSHOT,包含如下几个模块:简介通信协议通信框架传输协议NameServer消息发送brokerCommitLog存储ConsumeQueue&amp;amp;Index存储数据刷盘&amp;amp;文件删除主从与高可用消息消费顺序消...原创 2018-11-20 16:25:19 · 264 阅读 · 0 评论 -
设计模式之原型模式
一、原型模式定义原型模式就是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 当要实例化的类是在运行时动态指定的,或者制定类型的对象创建过程过于复杂,但我们又需要频繁的使用该对象,可以使用原型模式。二、UML结构图原型模式主要包含如下三个角色:Prototype:抽象原型类。声明克隆自身的接口。 ConcretePrototype:具体原型类。实现克隆的具体操作...原创 2018-08-15 00:06:01 · 234 阅读 · 0 评论 -
设计模式之简单工厂模式
一、简单工厂模式类图二、具体例子// 水果接口public interface Fruit { void display();}// 苹果,实现水果接口public class Apple implements Fruit { @Override public void display() { System.out.printl...原创 2018-08-15 23:31:29 · 178 阅读 · 0 评论 -
设计模式之单例模式
单例模式是最简单的设计模式之一。特点如下:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。闲话少说,下面来看单例模式的几种实现。1、饿汉式(线程安全)/** * 单例模式-饿汉式 */public class Singleton { private static Singleton instance...原创 2018-08-13 20:22:27 · 140 阅读 · 0 评论 -
设计模式之工厂方法模式
1、工厂方法模式简述工厂方法模式,又称多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。它重点关注对外开放一个用于对象创建的接口,让开发人员选择实例化哪一个类。工厂模式简单来说就是将对象生成的过程给封装起来了,调用者无需关注。2、UML类图3、实现例子/** * 抽象工厂 */public abstract class...原创 2018-08-19 15:24:09 · 163 阅读 · 0 评论 -
设计模式之装饰模式
1、装饰模式简述装饰模式以对客户端透明的方式给一个对象附加上更多的责任,可以在不需要创造更多子类的情况下,将对象的功能加以扩展。装饰模式包含如下角色:Component: 抽象构件ConcreteComponent: 具体构件Decorator: 抽象装饰类ConcreteDecorator: 具体装饰类2、UML类图3、代码实现/** * 饮料接口 * @au...原创 2018-08-30 21:29:00 · 141 阅读 · 0 评论 -
设计模式之组合模式
转载,详见 https://www.cnblogs.com/lfxiao/p/6816026.html转载 2018-08-27 23:38:29 · 143 阅读 · 0 评论 -
设计模式之建造者模式
1、建造者模式简述建造者模式是将一个复杂的对戏的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。它强调的是一步步创建对象,一般来说,建造者模式中对象不是直接返回的。通常来说,建造者模式包括下面几个角色:(1)Builder:抽象接口,用来规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体对象部件的创建。(2)ConcreteBuil...原创 2018-08-23 18:53:22 · 190 阅读 · 0 评论 -
设计模式之适配器模式
1、适配器模式简述适配器模式将一个类的接口,转换成开发人员期望的另一个接口,使用适配器让原本接口不兼容的类可以相互合作。适配器适合用于解决新旧系统(或新旧接口)之间的兼容性问题,而不建议在一开始就直接使用。如果从一开始接口和接口之间就没有兼容问题,不要多此一举使用适配器模式,不要为了设计模式而设计模式。适配器模式有三种:类适配器、对象适配器、接口适配器。2、UML类图类适配器...原创 2018-08-23 20:10:42 · 160 阅读 · 0 评论 -
设计模式之桥接模式
1、桥接模式简述桥接模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。桥接模式所涉及的角色 (1) Abstraction:定义抽象接口,拥有一个Implementor类型的对象引用 (2)RefinedAbstraction:扩展Abstraction中的接口定义 ...原创 2018-08-23 21:31:17 · 203 阅读 · 0 评论 -
外观模式
1、外观模式简述外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型设计模式,提供了客户端请求的简化方法和对现有系统类方法的委托调用。简单来说就是封装子系统,简化子系统调用。2、UML类图3、具体实现public class SubSystemA { public void methodA() { Sy...原创 2018-08-24 20:23:01 · 157 阅读 · 0 评论 -
设计模式之享元模式
转载,详见 https://blog.youkuaiyun.com/justloveyou_/article/details/55045638转载 2018-09-18 21:23:06 · 135 阅读 · 0 评论 -
设计模式之代理模式
1、代理模式简述代理模式为另一个对象提供一个替身或者占位符以控制对这个对象的访问。在代理模式中,我们创建具有现有对象的对象,以便实现系统控制功能。在外界访问的时候,我们可以添加自己的需求。比如说Spring框架里的AOP、JDK里的Dynamic Proxy、Cglib等。代理模式在各种开发框架和中间件中被广泛使用,比如RPC,数据库访问等。为什么要用代理模式?中介隔离作用:在某些情况下...原创 2018-10-09 19:49:55 · 174 阅读 · 0 评论 -
设计模式之观察者模式
1、观察者模式简述定义对象间的一种一对多的依赖关系,主要解决当一个对象的状态发生改变时,所有订阅它的对象都得到通知并且自动更新状态。2、UML类图3、代码实现public interface Subject { void addObserver(Observer observer); void removeObserver(Observer observer...原创 2018-10-09 20:44:45 · 154 阅读 · 0 评论 -
ThreadLocal源码分析
一、ThreadLocal简述JAVA对象在线程间是共享的,某些场景下,我们期望对象在线程间隔离,即一个对象只对一个线程可见,其他线程无法访问。ThreadLocal提供了线程内局部变量的机制,这个变量在线程的生命周期中存活。二、ThreadLocal使用下面是官方文档中的ThreadLocal的api:代码示例public class ThreadLocalTest {...原创 2018-10-29 20:01:39 · 178 阅读 · 0 评论 -
AQS源码学习
零零总总的学习了AQS的源码,在这里做一个汇总。AQS全称AbstractQueuedSynchronizer,可以说是java并发包的基础,在它之上衍生了许多同步类,如ReentrantLock、CountDownLatch、Semaphore等。顾名思义,抽象的队列式的同步器,它定义了一套多线程访问共享资源的同步器框架。使用它的主要方式是继承。闲话少说,开始进入正题。1、AQS概览...原创 2018-11-08 15:52:39 · 178 阅读 · 0 评论 -
设计模式-总纲
一、设计模式分类设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。二、设计模式的六大原则...原创 2018-08-07 23:37:52 · 168 阅读 · 0 评论