dubbo入门第一篇

dubbo入门第一篇

dubbo简单入门,快速搭建

互联网架构演变

互联网规模不断扩大,常规的垂直应用架构已经无法支持服务的正常使用,分布式服务架构的演变,可以保证在分布式服务间的调用不断的清晰明了。

  1. 单一应用架构
    网站流量很小,只需一台机器,一个应用,将所有功能部署在一个应用中,用于简化增删改查工作量的数据访问(ORM)是关键。

  2. 垂直应用架构
    访问量逐步增加,单一引用逐渐达到瓶颈(系统响应时间逐渐上升),提升效率的方法之一就是将应用拆分成互不相干的几个引用,来提升效率。此时加速前端页面开发的web框架(MVC)是关键

  3. 分布式服务架构
    当垂直应用越来越多,应用间的交互不可避免,将核心的业务独立出来一个服务,逐渐形成稳定的服务中心,使前端应用更加快速的满足多变的市场需求。此时用于提高业务复用和分布式服务框架(RPC)是关键

  4. 流动计算架构
    当服务月来越多,容量的评估,小服务资源浪费问题逐渐显现,此时需要增加一个基于访问压力实时管理集群容量,提高集群利用率。此时,提高机器利用率的资源调度和治理中心(SOA)是关键

  5. 注:

    • ORM:是“对象-关系映射”(object/relationl Mapping)的缩写。 面向对象开发都是将一切实体看成是对象(Object),关系型数据库是通过实体间关系映射连接数据。 也就是说 ORM是通过实例对象的语法,完成关系型数据库的操作的技术。
    • MVC:
      M(mode) 模型-- 模型是对应的后台系统的逻辑代码(控制层后面的代码,带有处理逻辑和连接数据库内容)
      V (view) 视图-- 视图层则是用户可以直接看到和体验的界面内容
      C(control)控制-- 对应用户在视图上的行为进行处理。
      RPC:remote procedure call 的缩写,翻译成中文则是:远程过程调用。 即有两台应用,通过远程的调用的方式,应用A—>应用B 拿到自己想要的东西。
    • SOA:面向服务的架构。 对于分布式来说,SOA就是把服务拆分成独立部署的模块,可以通过服务间调用,但是不强制绑定,也就是说的解耦合。 通过多个服务间配合最终提供一系列功能,服务间通过网络调用,而非采用进程内调用的方式进行通信。

在大规模服务化之前,应用可以通过RMI和hession等工具。 简单的暴露和引用远程服务。通过配置URL的地址进行调用。当服务越来越多时,服务URL配置就变得困难。此时需要一个注册中心。动态地注册和发现服务,使服务的位置变得透明。通过消费方获取服务提供方地址列表,实现软负载和Failover。接着 服务调用量增大,服务容量问题暴露出来,这个服务需要多少机器支撑?什么时候该添加机器。为了解决这个问题,第一步,需要将服务每天的调用量,响应时间,都统计出来,作为容量规划的指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大过程中记录响应时间变化,直到响应时间达到阈值,记录此时的访问量。在以此乘以机器数反推总量。

dubbo中涉及角色说明

下面先来看看dubbo中框架的参与者吧 (图片是在dubb官网复制的)
dubbo中的角色
dubbo中节点说明
provider: dubbo服务的提供者
consumer: dubbo服务中的消费之
registry: dubbo服务中的注册中心,provider在暴露服务是链接到registy上,以 方便被consumer查找可以提供服务的节点信息。consumer在启动是链接注册中心来获取provider的信息。
monitor: 统计服务的调用次数和调用时间的监控中心。
container: 服务运行容器

接下来开始写demo了 哈哈哈,就是这么快~
6. 安装zookeeper
mac: 控制台输入: brew install zookeeper
windows: 安装Zookeeper. 在官网http://zookeeper.apache.org/下载zookeeper.
我用的是mac所以这里就不展示Windows的zookeeper安装了 如果需要 请看 windows zookeeper安装

  1. 安装好zookeeper后,启动zookeeper
zkServer start

在这里插入图片描述

  1. 下边进入代码编写过程~
    dubbo服务提供者
    先写一个接口作为要暴露的方法
public interface HelloDubboProvider {

    String sayHello(String name);
}

接口实现类

@Service
public class HelloDubboProviderImpl implements HelloDubboProvider {
    @Override
    public String sayHello(String name) {
        return " hello, "+ name +" nice too meet you";
    }
}

dubbo-provider的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">


    <dubbo:application name="dubbo-provider" owner="yichen"/>
    <!-- zookeeper地址  protocol 注册中心类型  -->
    <dubbo:registry  address="127.0.0.1:2181" protocol="zookeeper"/>
    <!-- dubbo 提供者暴露的协议 和暴露的端口  统一有注册中心来管理,调用时不需要关注 -->
    <dubbo:protocol name="dubbo" port="20881"/>

    <dubbo:service interface="com.chenyi.dubbochen.api.HelloDubboProvider"   retries="0"  ref="helloDubboProviderImpl"/>

</beans>

dubbo-provider项目结构图
在这里插入图片描述
服务消费者代码
在spring.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <dubbo:application name="dubbo-provider-demo"/>
    <dubbo:registry  address="zookeeper://127.0.0.1:2181"/>
    <dubbo:reference id="helloDubboProvider" check="false" interface="com.chenyi.dubbochen.api.HelloDubboProvider" retries="0"  />
</beans>

因为我本地没有对应的maven私服,无法上传jar包 本来 HelloDubboProvider应该单独写在一个jar中,被provider项目和consumer项目引用
在这里插入图片描述
我这里就放在了各自的项目中
在这里插入图片描述
原因则是 dubbo会为接口生成一个代理类,在真正调用的时候,通过代理类获取远程服务的信息进行调用,这个后续我们在继续了解

现在服务提供者和服务消费者都构建好了 ,我们还需要写一个调用的方法,在consumer服务中加上一个http接口

@RestController
public class HelloController {

    @Autowired
    private HelloDubboProvider helloDubboProvider;

    @RequestMapping("/test")
    public String hello(String name){
        return helloDubboProvider.sayHello(name);
    }
}

服务启动后,调用consumer的接口,效果图如下
在这里插入图片描述
对于注册的dubbo服务提供者我们可以通过dubboadmin来看到对应的服务提供者和消费者
访问 :dubbo官网
到最底下,选择下载dubbo-admin服务
在这里插入图片描述
官方最新的dubbo Admin的版本是前后端分离的 后端服务需要修改以下配置(右侧部分)
在这里插入图片描述
启动前端vue项目,我们还需要安装npm 同样在mac下的安装命令是:

npm install npm@latest -g

安装成功后,通过右键选择下图
在这里插入图片描述
点击下方 dev 即可启动vue
在这里插入图片描述
效果图如下:
在这里插入图片描述
点击详情可以看到 服务的提供者 和消费者的信息
在这里插入图片描述
就这样,一个简单的dubbo项目已经搭建完成了。当然在实际开发场景中,要遵循接口统一放置,并提供jar的方式,来避免重复的接口定义。后续会继续讲解dubbo的其它配置参数和源码实现的。

嘿嘿~,第一次记录自己学习的过程,不喜勿喷

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值