之前一直在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,接下来慢慢的深入进去。
万事开头难,其实过程更艰难,我也不知道自己能坚持写到哪里?或许开始即结束,或许开始即新生。