一.前言 前面有说到Dubbo的服务发现机制,也就是SPI,那既然Dubbo内部实现了更加强大的服务发现机制,现在我们就来一起看看Dubbo在发现服务后需要做什么才能将服务注册到注册中心中. 二.Dubbo服务注册简介 首先需要明白的是Dubbo是依赖于Spring容器的(至于为什么在上篇博客中有介绍),Dubbo服务注册过程也是始于Spring容器发布刷新事件.而后Dubbo在接收到事件后,就会进行服务注册,整个逻辑大致分为三个部分: 1.检查参数,组装URL:服务消费方是通过URL拿到服务提…
motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析它的底层源码,分析的源码版本为:0.1.2.第一篇文章将以服务的发布和注册开始,注册服务使用zookeeper来分析.源码地址:https://github.com/weibocom/motan 本文涉及到的主要类和接口:MotanApiExportDemo.MotanDemoService.Mot…
本文将深入分析dubbo的服务发布涉及到的流程及主要类的代码.首先,我们先从类的关系图来看一下dubbo发布服务涉及到的相关类. 1.类图 上图展示了部分服务发布过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler.DubboBeanDefinitionParser.ServiceBean; 配置信息存储:ServicdConfig.RegistryConfig.MonitorConfig.ProtocolConfig.ProviderCon…
一.前言 前面讲了服务是如何导出到注册中心的.其实Dubbo做的一件事就是将服务的URL发布到注册中心上.那现在我们聊一聊消费者一方如何从注册中心订阅服务并进行远程调用的. 二.引用服务时序图 首先总的来用文字说一遍内部的大致机制 Actor:可以当做我们的消费者.当我们使用@Reference注解将对应服务注入到其他类中这时候Spring会第一时间调用getObject方法,而getObject中只有一个方法就是get().这里可以理解为消费者开始引入服务了. 饿汉式:在 Spring 容器调…
一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterPropertiesSet方法时引用服务,第二个是在ReferenceBean对应的服务被注入到其他类中时引用.这两个引用服务的时机区别在于,第一个是饿汉式的,第二个是懒汉式的.默认情况下,Dubbo使用懒汉式引用服务.如果需要使用饿汉式,可通过配置 <dubbo:reference> 的init属性开启…
这篇博客侧重于了解OkHttp的网络部分,包括Socket的创建.连接,连接池等要点.OkHttp对Socket的流操作使用了Okio进行了封装,本篇博客不做介绍,想了解的朋友可以参考拆轮子系列:拆Okio. OkHttp中关于网络的几个概念 下面的主要翻译自OkHttp的官方文档,查看原文. URL URLs(比如https://github.com/square/okhttp)是HTTP和网络的基础,不止指定了Web上的资源,还指定了如何获取该资源. Address Address(比如gi…
本篇文章主要介绍OkHttp执行同步和异步请求的大体流程.主要流程如下图: 主要分析到getResponseWidthInterceptorChain方法,该方法为具体的根据请求获取响应部分,留着后面的博客再介绍. Dispatcher类 Dispatcher类负责异步任务的请求策略.首先看它的部分定义: public final class Dispatcher { private int maxRequests = 64; private int maxRequestsPerHost = 5…
首先先看一张流程图,该图是从拆轮子系列:拆 OkHttp 中盗来的,如下: 在上一篇博客深入理解OkHttp源码(一)——提交请求中介绍到了getResponseWithInterceptorChain()方法,本篇主要从这儿继续往下讲解. getResponseWithInterceptorChain方法 private Response getResponseWithInterceptorChain() throws IOException { // Build a full stack o…
摘要 本文构建了一个使用工作量证明机制(POW)的类BTC的区块链.将区块链持久化到一个Bolt数据库中,然后会提供一个简单的命令行接口,用来完成一些与区块链的交互操作.这篇文章目的是希望帮助大家理解BTC源码的架构,所以主要专注于的实现原理及存储上,暂时忽略了 “分布式” 这个部分.严格来说还不能算是一个完全意义上的区块链系统. 开发环境 语言:GO; 数据库:BoltDB; IDE: Goland或其他工具都可以; 系统:不限,本文使用windows. BoltDB数据库 实际上,选择任何一…
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践(四)spring-kafka消费者源码 kafka原理和实践(五)spring-kafka配置详解 kafka原理和实践(六)总结升华 本文目录 1.kafkaProducer发送模型2.KafkaTemplate发送模板3.KafkaProducer 3.1KafkaProducer构造过程 3.…