自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 问答 (1)
  • 收藏
  • 关注

原创 go基础(二)函数基础

函数go语言的函数跟其他的函数类似,也有go语言自己的特性,会一一说明。函数定义函数使用func来定义,具体格式为:func funcName(param-list) (return-list) { // body}例如返回两个int值较小的一个方法/* func声明函数 min1是函数名 a, b 是函数参数列表,如果参数类型一致,可以简写 最后面小括号中的int是返回值。如果只有一个返回值,括号可省略 */func min1(a int, b int) (int) { i

2021-11-19 10:05:03 535

原创 go基础(一)基础数据类型与控制结构

基础数据类型与变量基本数据类型go语言提供了丰富的数据类型整形byte,int,int8,int16,int32,int64,还有uint等浮点float32,float64字符串stringrunerune等同于int32,这里提一个用法,统计非unicode字符数,用rune类型转换go不支持隐式类型转换,必须显示指定,类似函数,valueOfTypeB = typeB(valueOfTypeA), demoa := 5.0b := int(a)变量变量的定义相对灵活,

2021-11-18 21:15:59 431

原创 我和我的go语言

这里写自定义目录标题害,从java转go了,从头学起。这里是总目录,链接到go的文章。

2021-11-18 21:09:45 367

原创 go.demo

constfunc main() { const PI = 3.1415 fmt.Println(PI) // iota 自增常量 const ( a = iota b, c, d = iota, iota, iota e = iota ) fmt.Println(a) fmt.Println(b) fmt.Println(c) fmt.Println(d) fmt.Println(e)}funcfunc foo(args ...int) { for

2021-07-15 14:23:05 182

原创 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 360

原创 那些我不知道的spring注解

@ConditionalOnMissingBean该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean

2020-10-14 21:40:43 85

原创 给自己

许多顺风顺水的人在某个时候都会陷入路径依赖——尽管每个局部选择可能都是最优的,但最终归于普通。这就像贪心算法的问题——取决于初值,沿着梯度优化最终只能得到局部最优解。这相当于最终能达到的高度在一开始就被决定了。破解这种局面的算法之一是模拟退火。模拟退火算法的理念是在初期引入随机性,随着迭代次数的增加而减小随机因子,这样最终收敛到全局最优解的机率更大。跟随这个理念来考虑职业的选择,我决定跳出现有的路径,哪怕是这个路径的前方一片光明,现在只是为了体验不同的选择。引用自 https://byvoid.com/

2020-07-27 11:15:08 115

原创 RocketMQ消息消费六:消息过滤

概述RocketMQ的消息过滤分为两种:表达式过滤和类过滤。表达式过滤针对消息的属性过滤,适合于简单的场景,类过滤可以实现复杂的逻辑。表达式过滤表达式过滤分为tag过滤和SQL92过滤。SQL92在这里不展开描述,只介绍下tag过滤。在客户端发送消息的时候可以指定消息的tag,并根据消息的tag生成哈希值,为tagcode,存储在CommitLog中。所以tag过滤分为两部分:拉取过滤和消费过滤,分别发生在broker端和消费端。拉取过滤消费者过滤规则存储消费者订阅消费组时,将消息的过滤保存,

2020-05-24 11:41:25 1276 1

原创 RocketMQ消息消费五:延迟消息

概述延迟消息也叫定时消息,是指需要在一段时间后被消费的消息。考虑这种场景:用户下单后10分钟后不付款将订单取消,可以在用户下单后发送延迟消息,延迟10分钟检查订单如果未支付则取消订单。RocketMQ本身的commitLog采用顺序存储消息的方式,如果在commitLog实现延迟消息,需要对commitLog排序等处理,这与RocketMQ的设计理念不合。故RocketMQ针对延迟消息,只支持特...

2019-08-25 21:44:56 5128 1

原创 RocketMQ消息消费四:消费进度offset存储

概述消息消费完成后,需要将消费进度存储起来,即前面提到的offset。广播模式下,同消费组的消费者相互独立,消费进度要单独存储;集群模式下,同一条消息只会被同一个消费组消费一次,消费进度会参与到负载均衡中,故消费进度是需要共享的。消费进度相关类OffsetStore为统一的消费进度接口,定义了操作入口public interface OffsetStore { /** ...

2019-08-25 11:23:39 8898 2

原创 RocketMQ消息消费三:负载均衡

概述这篇文章介绍RocketMQ消费消息的负载均衡策略。因为消费消息的方式push&pull实际上均由pull模式实现,所以具体负载均衡是在客户端完成的。核心类—RebalanceImpl在Consumer启动的过程中会完成RebalanceService启动,每20s执行一次,最终调用RebalanceImpl来实现。RebalanceImpl为抽象类,子类有RebalancePu...

2019-08-25 09:55:13 1003

原创 RocketMQ消息消费二:长轮询

概述前面提到了,RocketMQ没有真正实现push模式消费,而是通过pull来实现。为了提高性能,未拉取到消息时,并不会返回消息未找到,而是将拉取请求挂起,直到有消息到来被唤醒或者超时。轮询分类分为长轮询和短轮询。短轮询1s,长轮询push模式为15s,pull模式为20s。轮询触发逻辑在 PullMessageProcessor.processRequest() 中 ...

2019-08-10 16:19:56 855

原创 RocketMQ消息消费一:消息拉取

概述前面讲了消息在broker端的存储,下面讲消息在消费者端的消费。简单介绍几个消费相关的概念。集群消费&广播消费是消费者两种不同的消费模式,广播消费模式下,一个消息会被所有的机器消费。集群消费模式下,一个消息只会被同一个集群消费一次,这里的集群由ConsumerGroup相同的机器组成。ConsumerGroup消费者归属于一个ConsumerGroup,相同ConsumerG...

2019-08-10 15:32:48 3080

原创 RocketMQ消息存储六:文件内存映射对象层MappedFile

概述这一层包含MappedFileQueue、MappedFile、MappedByteBuffer,其中MappedFileQueue在介绍CommitLog的时候已经讲过了,可以参考CommitLog。MappedFile对应着磁盘上的存储文件,同时也是MappedByteBuffer的封装,消息存储跟磁盘、内存的交互都是通过它完成。属性介绍 // 默认页大小 public...

2019-07-25 08:42:56 2903

原创 RocketMQ消息存储五:逻辑对象层IndexFile

概述IndexFile存储消息的索引信息,可以根据key进行查找。存储文件信息存储目录为HOME/store/index/,每个文件大小为420000040字节。文件名字为创建时的时间戳。IndexFile格式可以把IndexFile理解为哈希表。IndexFile解决冲突的方式是拉链,即把哈希值相同的数据存到链表中。如果在内存中,数据结构应该是一个slot数组,对象类型为index的一...

2019-07-23 08:07:13 466

原创 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 1136

原创 RocketMQ消息存储三:逻辑对象层CommitLog

概述CommitLog中存储了消息的完整信息,所有topic的消息都存储在一个CommitLog中。下面讲一下CommitLog的存储格式和存储过程存储文件信息CommtLog的存储其实是分多层的,CommitLog -> MappedFileQueue -> MappedFile,其中真正存储数据的是MappedFile。CommitLog存储目录为$HOME\store\co...

2019-07-21 13:41:39 2255 1

原创 RocketMQ消息存储二:数据文件存组件储层

数据文件存储组件层只有一个类DefaultMessageStore,它负责所有存储相关的工作,上层业务中的消息发送处理、查询处理、拉取处理,最终都委托给DefaultMessageStore操作。核心属性 // 存储配置 private final MessageStoreConfig messageStoreConfig; // CommitLog原始消息存储 ...

2019-07-17 20:10:00 1911 1

原创 office2019下载

使用迅雷下载即可安装。详细地址 :下载地址

2019-07-14 15:03:35 19852 2

原创 RocketMQ消息存储一:概览

前面介绍了消息的发送,这节主要介绍消息的存储。这里只关注普通消息,事务消息在后面介绍。MQ存储方式一般有分布式kv、文件系统、DB等,不同的MQ根据设计的不同有各自的选择,RocketMQ同kafka一样,选择了文件系统作为存储方式,在存储设计上借鉴了kafka。RocketMQ与kafka对比kafka将消息用topic+partition分割成不同的文件,在topic和partitio...

2019-07-10 08:50:50 486

原创 个性十足的代码注释

需要请从http://www.xjbglzdqhh.top/pages/37241e00afc14386ace5724e45be800bc7db直接复制。

2019-07-02 15:08:40 496

原创 windows10 win10官方iso镜像下载

可以通过迅雷直接下载镜像,速度超快。详见http://www.xjbglzdqhh.top/pages/c574c3e2d91cf7cd07905e8a4797ac9a12b8

2019-06-26 19:53:50 17765 2

原创 java nio随笔

Buffer类容量(capacity)容纳元素的最大数量,在缓冲区创建时被设定并且不能更改上界(limit)缓冲区第一个不能被读或者写的位置位置(position)下一个要被读或者写的位置标记(mark)备忘标记。调用mark()来设定mark=position,调用reset()设定position=mark满足 0 <= mark <= position <= ...

2019-04-27 15:31:47 110

原创 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 276

原创 RocketMQ源码学习-普通消息发送

系列文章总目录本文介绍普通消息的发送过程,事务消息在后面陈述。发送消息入口在测试代码中,DefaultMQProducerTest提供了消息发送的测试用例,可以看到,消息的发送由DefaultMQProducer完成,提供了多种发送入口,最终在DefaultMQProducerImpl.sendDefaultImpl进行。sendDefaultImpl参数介绍private SendRe...

2018-12-31 18:04:53 240

原创 RocketMQ源码学习-NameServer

系列文章总目录前言NameServer,用来提供服务发现和服务治理功能。RocketMQ中的NameServer是一个无状态的服务,可以有多个节点,各个节点之间不进行通信,Broker、Client跟所有的NameServer通信。NameServer的功能如下:维护Broker信息。每个Broker启动后向NameServer注册,NameServer保存活跃的Broker列表,包括Ma...

2018-12-12 19:04:51 291

原创 RocketMQ源码学习-通信与协议

系列文章总目录从github clone 最新源码,结构如下:本篇文章要讲的通信与协议部分的源代码在remoting模块下。remoting模块是复杂网络通信的模块,为其他需要网络通信的模块所依赖。在这个模块中,RocketMQ定义了基础的通信协议,结合Netty,使得端与端之间的数据交互变得统一而高效。基本类图先来看这个模块的类关系图:针对每个类分别做解释:RemotingServ...

2018-11-20 21:27:46 863

原创 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 315

原创 RocketMQ源码学习-总纲

总纲RocketMQ相关的介绍在这里就不做赘述了,详细请参见apache官方主页 和 github。源码学习总结基于4.4.0-SNAPSHOT,包含如下几个模块:简介通信协议通信框架传输协议NameServer消息发送brokerCommitLog存储ConsumeQueue&amp;amp;amp;Index存储数据刷盘&amp;amp;amp;文件删除主从与高可用消息消费顺序消...

2018-11-20 16:25:19 230

原创 AQS源码学习

零零总总的学习了AQS的源码,在这里做一个汇总。AQS全称AbstractQueuedSynchronizer,可以说是java并发包的基础,在它之上衍生了许多同步类,如ReentrantLock、CountDownLatch、Semaphore等。顾名思义,抽象的队列式的同步器,它定义了一套多线程访问共享资源的同步器框架。使用它的主要方式是继承。闲话少说,开始进入正题。1、AQS概览...

2018-11-08 15:52:39 144

原创 ThreadLocal源码分析

一、ThreadLocal简述JAVA对象在线程间是共享的,某些场景下,我们期望对象在线程间隔离,即一个对象只对一个线程可见,其他线程无法访问。ThreadLocal提供了线程内局部变量的机制,这个变量在线程的生命周期中存活。二、ThreadLocal使用下面是官方文档中的ThreadLocal的api:代码示例public class ThreadLocalTest {...

2018-10-29 20:01:39 143

原创 设计模式之观察者模式

1、观察者模式简述定义对象间的一种一对多的依赖关系,主要解决当一个对象的状态发生改变时,所有订阅它的对象都得到通知并且自动更新状态。2、UML类图3、代码实现public interface Subject { void addObserver(Observer observer); void removeObserver(Observer observer...

2018-10-09 20:44:45 124

原创 设计模式之代理模式

1、代理模式简述代理模式为另一个对象提供一个替身或者占位符以控制对这个对象的访问。在代理模式中,我们创建具有现有对象的对象,以便实现系统控制功能。在外界访问的时候,我们可以添加自己的需求。比如说Spring框架里的AOP、JDK里的Dynamic Proxy、Cglib等。代理模式在各种开发框架和中间件中被广泛使用,比如RPC,数据库访问等。为什么要用代理模式?中介隔离作用:在某些情况下...

2018-10-09 19:49:55 149

转载 设计模式之享元模式

转载,详见 https://blog.csdn.net/justloveyou_/article/details/55045638

2018-09-18 21:23:06 112

原创 设计模式之装饰模式

1、装饰模式简述装饰模式以对客户端透明的方式给一个对象附加上更多的责任,可以在不需要创造更多子类的情况下,将对象的功能加以扩展。装饰模式包含如下角色:Component: 抽象构件ConcreteComponent: 具体构件Decorator: 抽象装饰类ConcreteDecorator: 具体装饰类2、UML类图3、代码实现/** * 饮料接口 * @au...

2018-08-30 21:29:00 118

转载 设计模式之组合模式

转载,详见 https://www.cnblogs.com/lfxiao/p/6816026.html

2018-08-27 23:38:29 116

原创 外观模式

1、外观模式简述外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型设计模式,提供了客户端请求的简化方法和对现有系统类方法的委托调用。简单来说就是封装子系统,简化子系统调用。2、UML类图3、具体实现public class SubSystemA { public void methodA() { Sy...

2018-08-24 20:23:01 127

原创 设计模式之桥接模式

1、桥接模式简述桥接模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。桥接模式所涉及的角色 (1) Abstraction:定义抽象接口,拥有一个Implementor类型的对象引用 (2)RefinedAbstraction:扩展Abstraction中的接口定义 ...

2018-08-23 21:31:17 167

原创 设计模式之适配器模式

1、适配器模式简述适配器模式将一个类的接口,转换成开发人员期望的另一个接口,使用适配器让原本接口不兼容的类可以相互合作。适配器适合用于解决新旧系统(或新旧接口)之间的兼容性问题,而不建议在一开始就直接使用。如果从一开始接口和接口之间就没有兼容问题,不要多此一举使用适配器模式,不要为了设计模式而设计模式。适配器模式有三种:类适配器、对象适配器、接口适配器。2、UML类图类适配器...

2018-08-23 20:10:42 133

原创 设计模式之建造者模式

1、建造者模式简述建造者模式是将一个复杂的对戏的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。它强调的是一步步创建对象,一般来说,建造者模式中对象不是直接返回的。通常来说,建造者模式包括下面几个角色:(1)Builder:抽象接口,用来规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体对象部件的创建。(2)ConcreteBuil...

2018-08-23 18:53:22 161

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除