Dubbo快速入门

一、Dubbo概述

官网地址:Apache Dubbo

dubbo是一个轻量级、高性能java RPC框架,主要三大核心功能:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现

1、什么是RPC

RPC即为远程过程调用,如A服务器上的某个功能调用B服务器上的某个功能即为远程过程调用,

一个RPC框架两个很重要也是影响效率性能的点是

  • 如何高效实现序列化和反序列化
  • 如何快速建立通信

2、dubbo就是通过这一思想实现的框架,实现语言是java

3、架构

Dubbo快速入门_第1张图片

Provider:服务提供方,服务启动时向注册中心注册自己提供的服务

Consumer:服务消费者,在启动服务时向注册中心订阅自己所需的服务,从服务提供者地址列表中基于负载均衡算法选一台提供者进行调用,如果调用失败再选一台调用;consumer调用provider提供的服务使用的协议就是dubbo协议端口是20880,dubbo提供的协议有很多如http、dubbo、rmi等,

Registry:注册中心返回服务提供者地址列表给服务消费者,如果有变更,注册中心将基于长连接推送变更数据给服务消费者;这个注册中心可以不用,直接消费服务提供者提供的服务,这种消费称为直连消费

Monitior:监控中心,服务消费着和服务提供者在内存中累计调用次数和调用时间,定时每分钟发送一次数据到监控中心

二、dubbo直连工程

dubbo直连消费就是没有注册中心,消费者直接消费服务提供者提供的服务

1、创建provider工程(服务提供者)

Dubbo快速入门_第2张图片

 依赖


    
      com.alibaba
      dubbo
      2.6.0
    
    
    
      org.springframework
      spring-context
      4.3.16.RELEASE
    
    
    
      org.springframework
      spring-webmvc
      4.3.16.RELEASE
    

服务接口以及实现类

public interface MsgService {
    String hello(String hello);
}



public class MsgServiceImpl implements MsgService {
    public String hello(String hello) {
        return "hello"+hello;
    }
}

 springApplicationContext.xml文件




    
    

    
    

    
    
    
    

web.xml



  
    contextConfigLocation
    classpath:springApplicationContext.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  

2、创建consumer工程(服务消费者)

Dubbo快速入门_第3张图片

依赖


    
      org.example
      provider
      1.0-SNAPSHOT
    
    
    
      com.alibaba
      dubbo
      2.6.0
    
    
    
      org.springframework
      spring-context
      4.3.16.RELEASE
    
    
    
      org.springframework
      spring-webmvc
      4.3.16.RELEASE
    

测试方法

@RestController
public class MsgController {
    @Autowired
    private MsgService msgService;

    @RequestMapping("hello")
    public String hello(Model model){
        String msg = msgService.hello("ni hao");
        model.addAttribute("msg",msg);
        return "index";
    }
}

springMvc.xml



    
    
    
    

    
        
        
    

springApplicationContext.xml




    
    

    
    

web.xml



  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springMvc.xml,classpath:springApplicationContext.xml
    
    1
  
  
    dispatcherServlet
    /
  

使用tomcat依次部署provider和consumer两个项目,浏览器访问

http://localhost:8080/hello

三、dubbo推荐的项目结构

官方推荐的dubbo项目结构包括三部分,分别是

  • 服务消费工程:war工程 服务提供方
  • 服务提供工程:war工程 服务消费方
  • 服务接口工程:jar工程 ,业务接口和实体类

对上面的工程改造,创建一个interface的java工程,此工程只有一个接口类

Dubbo快速入门_第4张图片

//注意实体类要实现Serializable
public class User implements Serializable {
    private String name;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

//接口
public interface MsgService {
    String hello(String hello);
}

 provider工程需要修改的地方

1、pom依赖引入接口坐标


    
      org.example
      interface
      1.0-SNAPSHOT
    

2、删除provider原有的接口

3、实现类实现接口工程的接口和方法

4、核心xml



    
    
    
    
    
    
    

consumer工程需要修改地方

1、pom依赖删掉之前的provider坐标,增加interface工程坐标

2、springApplicationContext文件




    
    
    

 3、测试

@RestController
public class MsgController {
    //接口工程接口bean
    @Autowired
    private MsgService msgService;

    @RequestMapping("hello")
    public String hello(Model model){
        String msg = msgService.hello("ni hao");
        model.addAttribute("msg",msg);
        return "index";
    }
}

四、dubbo结合注册中心使用

上面说的直连方式在企业项目中基本不会使用,因为随着项目系统复杂,服务的数量增加,通过注册中心可以统一的管理服务,实际管理的就是服务url地址

注册中心可以有很多种,dubbo官方推荐使用zookeeper

关于zookeeper学习参考文章 ZooKeeper_程序三两行的博客-CSDN博客_zookeeper

1、创建接口工程interface

maven创建一个java工程即可,创建服务接口类

public interface MsgService {
    String hello(String hello);
}

 接口和上面直连方式一样没有什么变化

2、创建服务提供者provider

maven创建一个web工程,相较于直连方式,引入依赖有所变化




  4.0.0

  org.example
  provider
  1.0-SNAPSHOT
  war

  
    
    
      com.alibaba
      dubbo
      2.6.2
    
    
    
      org.apache.curator
      curator-framework
      4.1.0
    
    
    
      org.springframework
      spring-context
      4.3.16.RELEASE
    
    
    
      org.springframework
      spring-webmvc
      4.3.16.RELEASE
    
    
    
      org.example
      interface
      1.0-SNAPSHOT
    
  

 核心配置文件




    
    
    
    
    
    

其他代码和上面直连方式一样 

3、创建服务消费者consumer

依赖和provider一样

核心配置文件




    
    
    

    

其他代码和上面直连方式一样 

4、测试

@RestController
public class MsgController {
    //接口工程接口bean
    @Autowired
    private MsgService msgService;

    @RequestMapping("hello")
    public String hello(Model model){
        String msg = msgService.hello("ni hao");
        return msg;
    }
}

5、查看zookeeper目录

Dubbo快速入门_第5张图片

五、dubbo配置 

关于dubbo相关的配置,我们一般都在服务提供者工程中进行配置,因为服务提供正更了解服务的各种参数

1、关闭检查

dubbo默认是开启检查依赖服务的,我们可以在配置文件中关闭

    
    

    
    

2、重试次数

消费着访问服务提供者,如果访问失败,则切换重试访问其他服务器,但是切换会带来更长的延迟,访问时间变长,影响用户体验,通过retries="2"来设置重试次数

    

这个配置一般不用设置,默认重试一次就行

3、超时时间

服务提供和访问超时时间,一般只在服务提供者设置就行

 

4、版本号

随着项目的迭代更新,一个接口服务可能有多个实现类,区分不同的接口实现使用version

如下provider工程增加一个服务实现类MsgServiceImpl2

Dubbo快速入门_第6张图片

配置文件变化




    
    

    

    
    
    

    

 consumer配置文件




    
    
    

    
    
    

测试

@RestController
public class MsgController {
    //接口工程接口bean
    @Autowired
    private MsgService msgService;
    
    @Autowired
    private MsgService msgService2;
    

    @RequestMapping("hello")
    public String hello(Model model){
        String msg = msgService.hello("ni hao");
        String msg2 = msgService2.hello("ni hao 2");
        return msg+"==="+msg2;
    }
}

六、监控中心

dubbo-admin可视化的dubbo服务管理,安装时候需要指定注册中心,启动时候从注册中心获取服务消费者和提供者管理

参考使用

(4条消息) dubbo-admin安装以及dubbo-admin简单使用_尤雨东的博客-CSDN博客_dubbo-admin

你可能感兴趣的:(#,Dubbo,dubbo,java,java-zookeeper)