Dubbo 源码分析(一)一环境搭建
环境搭建的步骤有哪些
依赖外部的环境
使用的开发工具
源码的拉取
结构大致介绍
1 依赖的外部环境
安装JDK
安装Git
安装maven
这边我们就不介绍怎么安装这些外部环境了,大家自行从安装这些外部环境哈
2 使用的外部工具
编辑器使用 IntelliJ IDEA (简单好用,快捷键丰富)
GitHub Desktop GitHub的客户端软件,用起来真顺手
3 源码的拉取
源码的话我们上GitHub 上面直接拉取dubbo的源码即可, Dubbo 然后我们 Fork出一个属于我们自己的仓库,之后我们就可以在我们GitHub的仓库中看到这个项目了。然后我们将这个项目down到本地进行调试
具体Git操作不详细介绍,下面贴出几个比较好的供大家参考
https://blog.csdn.net/qq_32040767/article/details/77096761
https://blog.csdn.net/menggudaoke/article/details/77744541
https://juejin.im/entry/5a5f3b286fb9a01c9064e83b
https://www.cnblogs.com/MrJun/p/3351478.html
这里我们为什么使用Fork 而不是Star,这是因为star的项目你不是Pull Request 到源项目的,而Fork 是可以的。想想一下要是你在看源码的过程中发现了bug。然后提交给他们并审核这是一件多酷的事情
4 Dubbo的大致介绍
下面的这个 Dubbo 官网上最为经典的介绍,一张图就将整个Dubbo 过程大致的介绍的差不多。
什么是Dubbo?
一个分布式服务治理框架
Dubbo的作用是什么?
作用是解决下面的问题
单一应用架构
垂直应用架构
分布式服务架构
流动计算架构
节点角色说明
调用关系说明
服务容器负责启动,加载,运行服务提供者。
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
详细介绍下 Registry Provider Consumer
因为这三者是整个Dubbo 调用过程的链路核心
talk is cheap show me the code
光说不行,咱们通过看下项目中的源码来看下dubbo整个结构
dubbo提供了 一个demo项目供大家测试调试 整个demo已经在你down的dubbo的项目中了
打开我们的dubbo项目,我们会看到这样的一个子项目
这里就是那个demo子项目 就是我们可以直接运行测试的项目
将整个测试项目展开,我们会看见这几个文件
我们先进入consumer项目中的 Consumer类中,运行这个类。在这里是一个main函数,我们直接运行就ok了
之后我们再启动Provider 类。这样的话,我们就启动了一对消费者和生产类。这样的话,最简单的dubbo程序就 启动了。
在此我向大家推荐一个架构学习交流群。交流学习群号:821169538
里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析
高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些
成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多。
下面我们根据这个最简单的类来分析下
消费者的测试demo,循环调用方法
我们通过配置文件xml来进行服务的发现和启用,还有对注册中心的配置
下面介绍下服务的提供者Provider
出处:https://www.tuicool.com
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
绕过Cloudflare-JSfuck防护验证
近日在爬取某个站点的时候发现,默认必须通过首页跳转才可以访问其内容页,就像这样.. 经过使用Chrome调试工具审查Network过程后我们可以发现,在未设置cf_clearancecookie时,访问将无法进行。 我们可以红框内容看到首次访问返回503其后通过访问chk_jschi后触发302跳转至main并成功响应,并且在绿框中我们可以看到在第二个set-cookie取到后再次加载main界面成功 通过查看 chk_jschi 响应头我们可以看到其中的set-cookie内容正是我们所需要的 那么问题来了,这个是请求是怎么生成的呢?此时我们通过搜索蓝框内的键 我们来测试一下如果通过View-source会返回怎么样的结果,这里要注意要先将cookie清理干净 成功找到相关参数,看起来似乎是没啥问题了。不过有没有注意到jschl_answer并没有内容 并且存在一个id属性 这就让我立即想到会通过js将其赋值的可能。 于是根据ID查找,发现了惊喜 那么上面一堆乱七八糟的东西是什么呢。。 或许大部分人并不知道,这就是Jsfuck 也就是说,这些代码是可执行的 我们直接取出部分代码丢入c...
- 下一篇
Go 并发控制context实现原理剖析
1. 前言 Golang context是Golang应用开发常用的并发控制技术,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 context翻译成中文是"上下文",即它可以控制一组呈树状结构的goroutine,每个goroutine拥有相同的上下文。 典型的使用场景如下图所示: 上图中由于goroutine派生出子goroutine,而子goroutine又继续派生新的goroutine,这种情况下使用WaitGroup就不太容易,因为子goroutine个数不容易确定。而使用context就可以很容易实现。 2. Context实现原理 context实际上只定义了接口,凡是实现该接口的类都可称为是一种context,官方包中实现了几个常用的context,分别可用于不同的场景。 2.1 接口定义 源码包中src/context/context.go:Context 定义了该接口: type Context interface { Deadline() (deadline time.Time, o...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长