• Java后台技术(Dubbo入门)


      我现在公司提供的产品是即时通讯软件,因为我从.net桌面应用开发转岗,从java后台转项目经理,让我有幸拥有了后台开发人员所有的权限,所有的后台源码和技术文档对我开放,可惜仅在后台待了3周不到,还没来得及从事后台开发,就被直接安排开始项目经理的工作。虽然现在已经开始从事管理的工作,但是之前熟悉后台源码时,对后台的技术栈都进行了熟悉,近期将一直更新Java后台的技术栈学习总结。

      今天我要分享的就是Dubbo,Dubbo是阿里巴巴在2011年开源的项目,因为在阿里已经得到广泛应用,验证了其稳定性和健壮性,所有被很多公司作为Java后台的RPC框架。

           下面先讲解下Dubbo是什么,有什么功能。

      Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过高性能 RPC 实现服务的输出、输入功能和 Spring 框架无缝集成。Dubbo 包含远程通讯、集群容错和自动发现三个核心部分。

      Dubbo核心功能

    • · 远程通讯,提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
    • · 集群容错,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    • · 自动发现,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

      工作模型

     上图很好的体现了Dubbo的工作模型,由服务提供方(Provider)向注册中心(Registry)注册服务。当服务消费者(Consumer)需要使用服务时,需要先向注册中心(Registry)进行订阅,订阅后服务消费者(Consumer)就能采用同步方式(invoke)来调用该服务了。

      配置标签

    标签

    用途

    解释

    <dubbo:service/>

    服务配置

    用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

    <dubbo:reference/>

    引用配置

    用于创建一个远程服务代理,一个引用可以指向多个注册中心

    <dubbo:protocol/>

    协议配置

    用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

    <dubbo:application/>

    应用配置

    用于配置当前应用信息,不管该应用是提供者还是消费者

    <dubbo:module/>

    模块配置

    用于配置当前模块信息,可选

    <dubbo:registry/>

    注册中心配置

    用于配置连接注册中心相关信息

    <dubbo:monitor/>

    监控中心配置

    用于配置连接监控中心相关信息,可选

    <dubbo:provider/>

    提供方配置

    当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

    <dubbo:consumer/>

    消费方配置

    当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

    <dubbo:method/>

    方法配置

    用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

    <dubbo:argument/>

    参数配置

     

      服务注册

      我公司产品后台的注册方法如下

      定义接口

    1 public interface HmWorkGroupDubboService
    2 {
    3         public Long createWorkGroup(Map<String,Object> param);
    4         public Long updateWorkGroup(Map<String, Object> param);
    5 }

      添加实现

     1   @service(group="pa",version="1.0.0",interfaceClass= HmWorkGroupDubboService.class,timeout=150000)
     2     public class HmWorkGroupDubboServiceImpl implements HmWorkGroupDubboService
     3     {
     4         @override
     5         public Long createWorkGroup(Map<String, Object> param)
     6         {
     7             //业务
     8         }
     9         @override
    10         public Long updateWorkGroup(Map<String, Object> param)
    11         {
    12             //业务
    13          }
    14 }

      服务配置

      在application.yml中添加

     1 dubbo:
     2   registry:
     3     address:zookeeper://108.20.18.74:2181
     4     
     5   protocal:
     6     port:20861
     7     name:dubbo
     8   application:
     9     name:work
    10   config:
    11     timeout:5000
    12     group:
    13       name:pa
    14       version:1.0.0
    15    consumer:
    16     check:false
    17    scan:hm.hmp.front.dubbo

      扫描服务

      在启动函数类上添加@DubboComponentScan标签

    1 @DubboComponentScan("work.dubbo.service")
    2 @EnableDubboConfiguration
    3 public class Application
    4 {
    5     public static void main(String[] args)
    6     {
    7         ///...
    8     }
    9 }

      服务订阅

      添加配置

      添加配置,在文件dubbo-context.xml中

     1 <!--提供方应用信息-->
     2 <dubbo:application name="hm-admin"/>
     3 <dubbo:monitor protocal="registry"/>
     4 <dubbo:registry address="${zookeeper.config.dubbo}"/>
     5 <!--Dubbo协议暴露服务端口-->
     6 <dubbo:protocal name="dubbo" port="${dubbo.config.port}"/>
     7 <dubbo:consumer check="false"/>
     8 
     9 <!--第三方接口-->
    10 <dubbo:reference id="hmWorkGroupDubboService" interface="dubbo.service.HmWorkGroupDubboService" 
    11                  generic=""true" group="${dubbo.config.group.txt}" version="${dubbo.config.txt.version}" timeout="150000"/>

      引入配置

    1 @Configuration
    2 @ImportResource("{dubbo-context.xml}")
    3 public class DataSourceConfig{
    4   ///
    5   }

      服务使用

    1 GenericService dubboServiceWorkGroup = ApplicationContextUtils.getApplicationContext().getBean("hmWorkGroupDubboService",GenericService.class);
    2 Object workGroupResult =   dubboServiceWorkGroup.$invoke("createWorkGroup",new String[]{"java.util.map"},new Object[]{workGroupMap});

      相信大家也发现了上面使用的注册中心时Zookeeper,是因为zookeeper能够帮助Dubbo实现分布式及负载均衡。

      现在应该已经把Dubbo讲解清除了,后续将继续其他Java技术栈的学习和总结。

  • 相关阅读:
    cs224n word2vec
    背包问题
    动态规划二
    动态规划
    递推求解
    Tmux 使用技巧
    LeetCode 75. Sort Colors
    LeetCode 18. 4Sum new
    LeetCode 148. Sort List
    LeetCode 147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/chenchaochao034/p/11482217.html
Copyright © 2020-2023  润新知