自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(234)
  • 收藏
  • 关注

原创 RocketMQ特性

特性订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。Ro...

2019-04-07 11:19:02 155

原创 RocketMQ消息存储

消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。消息存储整体架构消息存储架构图中主要有下面三个跟消息存储相关的文件构成。(1) CommitLog:消息主体以及元数据的存储主体,存储Producer端...

2019-04-07 11:17:49 1061

原创 RocketMQ架构设计

简介Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可扩展性。它提供了多种功能: 发布/订阅消息模型 预定的消息传递 消息追溯性按时间或偏移量 记录流媒体的中心 大数据集成 可靠的FIFO和严格的有序消息传递在同一队列中 高效的推拉消费模式 ...

2019-04-07 11:15:13 430

原创 抄书之《MySQL技术内幕:InnoDB存储引擎》

1. 表的分区本质上还是一张表,只不过存储的地方分为了多个,使用上也和没分区一样,但是分区总要根据一种模式,比如根据id进行分区,这个时候根据id进行查询时,会先根据分区算法选出存储的区域,然后在该分区中查找即可,然而如果根据该表的其他key查询时,则该查询语句的执行就需要在每个分区中查找,多了很多次io查找,因为每个分区都需要遍历一遍。感觉这个分区和表的分表类似,分表时每个表名不同,没有数据库中...

2019-03-12 12:17:01 120

原创 Elasticsearch之Java简单操作

1. 创建索引,index和type,index.max_result_window代表返回的最大结果数量,可用于分页,但是最多可以取该数量,如果要取更多的就需要使用游标获取。import org.apache.http.message.BasicHeader;import org.elasticsearch.action.admin.indices.create.CreateIndexR...

2019-03-06 18:15:34 1741

原创 Hmily(3)

5. 提供端的方法也需要Hmily注解,当然也会有确认取消方法,执行切面方法DubboHmilyTransactionInterceptor#interceptor这个时候的context不会为空,转成对象HmilyTransactionContext,HmilyTransactionAspectServiceImpl#invoke找出合适的处理类HmilyTransactionFactorySe...

2019-02-01 16:32:33 587

原创 Hmily(2)

4. 事务发起者执行事务处理StarterHmilyTransactionHandler public Object handler(final ProceedingJoinPoint point, final HmilyTransactionContext context) throws Throwable { Object returnValue;...

2019-02-01 14:41:46 309

原创 Hmily(1)

1. Hmily是个高性能异步分布式事务TCC框架,具体包含Spring AOP,Disruptor,Dubbo等框架,当然还有其他的RPC框架。源码在https://github.com/yu199195/hmily,本文以duubo调用,mysql存储事务日志,kryo序列化为主,主要以下单支付减库存减余额为例,注解为Hmily,确认方法,取消方法和本次的tyr操作方法参数应该保持一致。前两个...

2019-02-01 14:22:30 924

原创 Spring AOP(4)

8. 执行代理JdkDynamicAopProxy#invoke,exposeProxy主要用来暴露代理,实现增强,Spring事务的嵌套就需要该参数。public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { MethodInvocation invocation; Obje...

2019-01-29 15:44:12 154

原创 Spring AOP(3)

5. 创建代理,AbstractAutoProxyCreator#createProxy,创建代理工厂,解析proxyTargetClass属性和实现的接口属性protected Object createProxy( Class<?> beanClass, String beanName, Object[] specificInterceptors, TargetSour...

2019-01-29 12:32:58 154

原创 Spring AOP(2)

3. 初始化元数据AspectMetadata,从ReflectiveAspectJAdvisorFactory获取所有顾问类Advisor,获取所有不带Pointcut注解的方法public List<Advisor> getAdvisors(MetadataAwareAspectInstanceFactory aspectInstanceFactory) { Class&...

2019-01-29 11:48:12 323

原创 Spring AOP(1)

1. xml配置文件定义/META-INF/spring.schemas,具体的命名空间解析类/META-INF/spring.handlerspublic class AopNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { // In 2.0 XSD as well ...

2019-01-28 18:58:10 151

原创 Elastic-Job执行作业(3)

7. 执行任务,判断分片集合是否为空execute(shardingContexts, JobExecutionEvent.ExecutionSource.NORMAL_TRIGGER); private void execute(final ShardingContexts shardingContexts, final JobExecutionEvent.ExecutionSourc...

2019-01-28 15:35:13 719

原创 Elastic-Job执行作业(2)

4. 获取运行在本作业实例的分片项集合public List<Integer> getLocalShardingItems() { if (JobRegistry.getInstance().isShutdown(jobName) || !serverService.isAvailableServer(JobRegistry.getInstance().getJo...

2019-01-28 14:30:41 294

原创 Elastic-Job执行作业(1)

1. Lite调度作业LiteJob开始执行任务,因为我们在构造JobDetail时指定的该类。public void execute(final JobExecutionContext context) throws JobExecutionException { JobExecutorFactory.getJobExecutor(elasticJob, jobFacade...

2019-01-28 12:00:27 1377

原创 Elastic-Job初始化(2)

4. 初始化作业调度控制器JobScheduleController,底层定时任务使用的是quartz开源框架,指定作业类为LiteJob,设置他的两个属性elasticJob和jobFacade,创建quartz调度器。 private JobDetail createJobDetail(final String jobClass) { JobDetail result =...

2019-01-25 15:59:55 471

原创 Elastic-Job初始化(1)

1. 利用Spring进行配置,配置自己的分布式作业的命名空间处理器,这里主要以simple为主,前提还是要配置META-INF/spring.handlers和spring.schemaspublic final class JobNamespaceHandler extends NamespaceHandlerSupport { @Override public...

2019-01-25 14:30:15 1756

原创 Java系列之CyclicBarrier

1. CyclicBarrier类似可重复使用的CountDownLatch,可以允许多个线程执行完后才可以执行某一操作,并且可以循环使用。第一个变量是允许线程数,第二个是所有线程执行完后最后需要执行的任务,线程执行时只会递减count值,循环使用时复原状态需要用parties重新设置count值。public CyclicBarrier(int parties, Runnable barr...

2018-12-12 12:36:15 98

原创 Java系列之ReentrantReadWriteLock

1. ReentrantReadWriteLock可重入读写分离锁public ReentrantReadWriteLock() { this(false); }public ReentrantReadWriteLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync()...

2018-12-11 20:23:26 264

原创 Java系列之ReentrantLock

1. ReentrantLock可重入锁分为公平和非公平锁,通过构造函数进行设置,有时会用它来替代synchronized,区别在于前者能实现顺序公平,实现方式通过原子cas操作即cpu原语实现,而后者是通过字节码monitor-enter以及monitor-exit实现, public ReentrantLock() { sync = new NonfairSync();...

2018-12-11 12:05:21 115 2

原创 Java系列之CountDownLatch

1. CountDownLatch代表多个操作都执行完时整个程序才可以继续向下执行。数量可以设置public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count);...

2018-12-10 20:59:09 401

原创 Java系列之Semaphore

1. Semaphore用来控制同时允许的操作的令牌数量,分为公平和非公平,核心类Sync继承AbstractQueuedSynchronizerpublic Semaphore(int permits) { sync = new NonfairSync(permits); }2. 尝试获取令牌,数量可以自己设置,这个对于两种Sync都是一样的操作。publ...

2018-12-10 19:46:17 214

原创 Java系列之ServiceLoader

1. ServiceLoader主要用于实现Java的SPI功能,从类加载器中加载jar包下的符合实现该接口的实现类。2. 使用时一般使用下列方式,ServiceLoader实现了Iterable接口,可以进行遍历取值 public static <S> ServiceLoader<S> load(Class<S> service, ...

2018-12-06 12:06:23 360

原创 Disruptor(3)

5. 通过ProcessingSequenceBarrier#waitFor来获取可以消费的下标。检查警告标志是否正常,public long waitFor(final long sequence) throws AlertException, InterruptedException, TimeoutException { checkAlert()...

2018-11-29 18:28:13 529

原创 Disruptor(2)

3. RingBuffer#addGatingSequences=》AbstractSequencer#addGatingSequencespublic void addGatingSequences(Sequence... gatingSequences) { sequencer.addGatingSequences(gatingSequences); }...

2018-11-29 17:12:28 150

原创 Disruptor(1)

1. Disruptor的核心是解决伪共享,通过给填充整个缓存行来达到提高缓存命中率以及提高并发。通过一个环状数据结构实现RingBuffer。主要使用的方式如下,一个存储数据的RingBuffer,一个执行消费的线程生成器public Disruptor(final EventFactory<T> eventFactory, final int ringBufferSize, ...

2018-11-29 16:18:28 462

原创 Eureka注册流程(2)

4. AcceptorExecutor#AcceptorRunner线程和TaskExecutors#BatchWorkerRunnable线程在初始化时作为守护线程启动,这里处理请求有批量和单个,但是共用一个AcceptorExecutor,只是参数maxBatchingSize不一样,AcceptorRunner#run,先判断线程有没有被强制停止, public void run() ...

2018-11-19 18:48:28 1453

原创 Eureka注册流程(1)

1. 客户端发起注册本机信息请求JerseyApplicationClient父类AbstractJerseyEurekaHttpClient#registerpublic EurekaHttpResponse<Void> register(InstanceInfo info) { String urlPath = "apps/" + info.getAppNam...

2018-11-16 18:58:12 846

原创 Eureka服务端初始化(2)

4. 注册中心初始化registry.init(peerEurekaNodes);public void init(PeerEurekaNodes peerEurekaNodes) throws Exception { this.numberOfReplicationsLastMin.start(); this.peerEurekaNodes = peerEu...

2018-11-16 17:08:10 410

原创 Eureka服务端初始化(1)

1. 服务启动时会执行ServletContextListener即EurekaBootStrap,初始化通用配置的属性,再初始化服务上下文initEurekaServerContext,最后保存在ServletContext中public void contextInitialized(ServletContextEvent event) { try { ...

2018-11-16 10:40:58 1115

原创 Eureka客户端初始化(4)

10. 上接RetryableEurekaHttpClient#execute,继续执行clientFactory.newClient(currentEndpoint);返回的是new RedirectingEurekaHttpClient(endpoint.getServiceUrl(), delegateFactory, dnsService);requestExecutor.execute(...

2018-11-12 20:01:52 456

原创 Eureka客户端初始化(3)

6. 根据配置clientConfig.shouldRegisterWithEureka()生成eurekaTransport的注册客户端工厂newRegistrationClientFactorystatic EurekaHttpClientFactory canonicalClientFactory(final String name, ...

2018-11-12 17:38:52 582

原创 Eureka客户端初始化(2)

4. 上接Jersey1TransportClientFactories#newTransportClientFactory,构造收集监控信息的工厂metricsFactory public static TransportClientFactory createFactory(final TransportClientFactory delegateFactory) { f...

2018-11-12 14:54:12 632

原创 Eureka客户端初始化(1)

1. 基于1.X版本的源码ExampleEurekaService的main函数启动。通过配置中间件Archaius获取全局通用配置实例,实例化MyDataCenterInstanceConfig,父类PropertiesInstanceConfig以及AbstractInstanceConfig,拼接命名空间以及获取对应文件配置实例,返回实例配置instanceConfigpublic P...

2018-11-12 11:51:38 893 1

原创 Sharding-Sphere初始化(三)

9. 执行StandardRoutingEngine#route获取路由结果,获取分表规则以及分库分表对应的字段列,获取分库分表对应的字段对应的具体值, public RoutingResult route() { TableRule tableRule = shardingRule.getTableRule(logicTableName); Collecti...

2018-10-17 12:00:58 1179

原创 Sharding-Sphere初始化(二)

5. 开始解析insert语句,AbstractInsertParser#parse,执行nextToken获取到下一个字符段INTO,public final DMLStatement parse() { lexerEngine.nextToken(); InsertStatement result = new InsertStatement(); ...

2018-10-16 22:25:05 1038 8

原创 Sharding-Sphere初始化(一)

1. 采用Spring配置文件使用该数据库中间件,配置如下 <!-- 配置数据源一 --> <bean id="separate_entity_0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverC.

2018-10-16 18:13:06 8249

原创 CAT的Server消费消息(二)

1. 消费消息的流程从DefaultMessageHandler#handle=》RealtimeConsumer#consume,查找符合当前时间的时段Period,每个时段都会有开始结束时间,timestamp >= m_startTime && timestamp < m_endTime;public void consume(MessageTree tre...

2018-09-14 16:54:21 349

原创 CAT的Server消费消息(一)

1. 初始化RealtimeConsumer实时消费,使用容器自带的初始化前置处理Initializable,初始化PeriodManager,时间间隔为一个小时,也就是以小时为维度进行统计数据,并且设置统计类和消息分析器。public void initialize() throws InitializationException { m_periodManager = new Per...

2018-09-14 12:45:51 314

原创 CAT的Server初始化

1. Server初始化从web.xml文件开始,作为一个war包项目,首先需要初始化Servlet,首先是CatServlet专门初始化cat相关的server程序,比如接受客户端传过来的数据等等,另一个servlet为MVC专门提供数据查询接口的普通的MVC功能,功能相当于缩小版的SpringMVC。过滤器有两个CatFilter最主要是做一些过滤处理,每次请求经过ENVIRONMENT,ID...

2018-09-13 18:57:15 700

空空如也

空空如也

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

TA关注的人

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