dubbo源码开篇之庐山面目

之前一直在CSDN写博客,有时候会看到简书有很多优质的博文,于是就想换个平台。为什么换呢?其实,我觉得就人性而言,在一个熟悉环境我们总是很懒散,随意,所以博客的质量会大大折扣(其实本来就很水)。为了不想那么随意的写这部分内容就想换个平台来写,于是就想起来了简书,这个程序员分享的另一个天地,还有一个原因就是觉得简书特别干净,页面看起来很清爽,没有广告,耳目清新的感觉,翻看csdn充满了浓浓的铜臭味,企业就是这样,他们也许发展也要理解嘛。

其实,对于开篇写什么还是犹豫了很久,是写java基础,还是写ssm框架,想着把csdn中写过的在复制一份在精益求精一下,后来想一想还是算了,毕竟写过的又在上面修改作为第一篇诚意不足。 于是就想把之前一直没写,又想写的dubbo技术作为开篇内容。

对于dubbo,自己也了解了漫长的一段时间,零零总总,前前后后也大致了解了它的一个运行原理和内部的一个基本结构,其实用dubbo来开篇还是有难度的,毕竟我其实并不是很精通dubbo,然而有压力才能有动力嘛,所以就想着重新梳理一下,开篇先简单介绍关于dubbo的3点知识,后续再一系列的从每一个模块进行详细的记录。

接下来,还是经典的2W1H的模式去展开:

WHAT

官方的定义:dubbo是一个高性能、重量轻、基于java的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程调用、容错和负载均衡以及自动服务注册和发现。

个人理解:dubbo就是通过网络建立双向连接,通过网络流传递数据,进行远程调用其他服务器上的方法,在通过网络流传递到调用方,这个期间有对象的序列化,编解码,网络协议,注册中心,监控中心等。

WHEN

在没有微服务概念之前,基本上我们的项目都是基于ALL-IN-ONE架构,所有的代码都在一个项目里面,但随着互联网的快速发展,ALL-IN-ONE架构无法承受得起大的并发量,就出现了前后端分离,这样减轻了服务器的一小部分压力,但是作用微乎其微,互联网用户的激增,业务逻辑的复杂化,迫使我们需要另一种架构,微服务化。什么是微服务呢?个人理解:微代表轻量级,易于扩展和开发,发布。服务代表模块化,把一个大的项目拆分成几个小项目。微服务又可以理解为分布式架构,基于RPC的远程调用。对于应用的场景:首先分布式架构比ALL-IN-ONE搭建繁琐,对于小型项目用ALL-IN-ONE简单,快速,并发小还是有优势的,对于大型的项目,基本上我们都是分布式架构设计。

HOW

首先,应该看一下dubbo的一张经典图片



这张图很大程度上展示了dubbo的运行原理,有生产端,消费端,监控中心,容器,注册中心。一个简单的例子:

DemoServiceImpl.java :

package com.alibaba.dubbo.demo.provider;

import com.alibaba.dubbo.demo.DemoService;

public classDemoServiceImplimplementsDemoService{

    publicStringsayHello(String name){

        return "Hello " + name;

    }

}

配置公开服务:



加载配置,启动容器:

import org.springframework.context.support.ClassPathXmlApplicationContext;

public classProvider{

    publicstaticvoidmain(String[] args)throwsException{

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});

        context.start();

        System.in.read(); // Press any key to exit    }

}

配置消费服务:



消费者调用生产者服务:

import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.dubbo.demo.DemoService;

public classConsumer{

    publicstaticvoidmain(String[] args)throwsException{

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});

        context.start();

        DemoService demoService = (DemoService)context.getBean("demoService"); //Obtaining a remote service proxy        String hello = demoService.sayHello("world"); // Executing remote methods        System.out.println( hello ); // Display the call result    }

}

基本一个简单的远程调用就实现了。接下来通过资料了解一下dubbo的特性。

dubbo没有出现以前,远程调用基本基于rmi,hessian等工具,我了解过java的rmi协议:服务类需要实现接口,基本也是暴露一个服务端ip和端口,客服端连接,进行网络通讯,传递参数和结果内容。详细的步骤可以查询百度。

总结:这样的开篇总让人觉得不是很精致,没有技术的严谨性,凡是慢慢来,开篇的定位就是简单的引入dubbo,接下来慢慢的深入进去。

万事开头难,其实过程更艰难,我也不知道自己能坚持写到哪里?或许开始即结束,或许开始即新生。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。