栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Dubbo-入门简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dubbo-入门简介

一、RPC

RPC(Remote Procedure Call Protocol)远程过程调用协议;是一种进程间通信方式,该协议允许运行于一台计 算机的程序调用另一台计算机的程序

RPC主要功能是让构建分布式计算(应用)更容易

RPC基本原理 

1、客户端Client通过以本地调用的方式,调用远程接口服务;

2、客户端存根Client Stub接收到调用后,将调用信息对象进行序列化,组装成网络传输的二进制消息体;

3、客户端Client通过Sockets将消息发送到远程服务端;

4、服务端存根Server Stub收到消息后,对网络信息对象进行反序列化解码;

5、服务端存根Server Stub根据解码结果,调用服务端本地的接口服务;

6、本地接口服务执行,并将处理结果返回给服务端存根Server Stub;

7、服务端存根Server Stub将返回结果对象进行序列化,组装成消息体;

8、服务端Server再通过Sockets将消息发送到客户端;

9、客户端存根Client Stub收到结果消息后,对网络信息对象进行序列化解码;

10、客户端Client拿到最终接口处理结果

分布式系统

1、分布式系统是若干个独立计算机的集合,这些计算机对于用户来说就像单个相关系统

2、分布式系统是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统

3、分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据

二、Dubbo简介

 Apache Dubbo 是一款高性能、轻量级的开源 Java RPC服务框架

Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:

1、面向接口代理的高性能RPC调用

2、智能容错和负载均衡

3、服务自动注册和发现

4、高度可扩展能力

5、运行期流量调度

6、可视化的服务治理与运维

Dubbo官网 https://dubbo.apache.org/zh/

Dubbo主要核心部件

Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo基本架构

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务

服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用

注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

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

Dubbo支持多种协议:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis

dubbo 官方推荐使用 dubbo 协议;dubbo 协议默认端口 20880

使用 dubbo 协议,spring 配置文件加入:

三、Dubbo示例 (一)直连方式

点对点的直连项目:消费者直接访问服务提供者,没有注册中心。消费者必须指定服务提供者的访问地址(url)

消费者直接通过 url 地址访问固定的服务提供者

1、创建一个 maven web 服务提供者(userservice-provider)工程 ;创建数据模型和service接口

pom.xml




  4.0.0

  com.mycompany.dubbo
  dubbo-1-link-userservice-provider
  1.0.0
  war

  
    
    
      org.springframework
      spring-context
      5.1.4.RELEASE
    
    
      org.springframework
      spring-webmvc
      5.1.4.RELEASE
    

    
    
      com.alibaba
      dubbo
      2.6.2
    

  

  
    
      
      
        maven-compiler-plugin
        3.1
        
          1.8
          1.8
        
      
    
  

User.java

注:

Dubbo传输的对象必须序列化(Serializable)

不然报错:cause: java.lang.IllegalStateException: Serialized class 

public class User implements Serializable {
    private Integer id;

    private String username;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

UserService UserServiceImpl

public interface UserService {
    User queryUserById(Integer id);
}

public class UserServiceImpl implements UserService {
    @Override
    public User queryUserById(Integer id) {
        User user = new User();
        user.setId(id);
        user.setUsername("admin");
        user.setAge(18);

        return user;
    }
}

spring.xml




    
    

    
    

    
    

    
    


    
    

    


web.xml




    
    
        contextConfigLocation
        classpath:dubbo-userservice-provider.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

将其打成 jar 包

服务接口项目的类文件打包为 jar, 安装到 maven 仓库,仓库中的提供者 jar 可以被消费者使用。使用 idea 的 maven 窗口执行 install

我的本地maven仓库配置路径

这时去本机相应路径下查看jar包

2、创建一个 maven web 消费者(userservice-provider)工程 ;创建数据模型和service接口

pom.xml

com.mycompany
  dubbo-1-link-consumer
  1.0.0
  war

  
    
    
      org.springframework
      spring-context
      5.1.4.RELEASE
    
    
      org.springframework
      spring-webmvc
      5.1.4.RELEASE
    

    
    
      com.alibaba
      dubbo
      2.6.2
    

    
    
      com.mycompany.dubbo
      dubbo-1-link-userservice-provider
      1.0.0
    

  

UserController.java

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/user")
    public String userDetail(Model model, Integer id){
        User user = userService.queryUserById(id);
        model.addAttribute("user",user);
        return "userDetail";
    }
}

application.xml




    
    

    
    

    
    
        
        
    

dubbo-consumer.xml



    
    

    
    

    
    


    
    

 web.xml




  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:application.xml,classpath:dubbo-consumer.xml
    
  

  
    dispatcherServlet
    /
  

 .jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    用户详情


用户详情
用户标识:${user.id}
用户名称:${user.username}

此时我们配置Tomcat启动 服务提供者

再启动消费者

这时浏览器打开访问

Dubbo的配置请参考

配置管理 | Apache Dubbo

本文主要使用的xml标签配置

(二)服务接口尽可能大粒度

建议将服务接口、服务模型、服务异常等均放在公共包中。 服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤

1、我们创建一个maven Java 接口模块

将其打成 jar 包

服务接口项目的类文件打包为 jar, 安装到 maven 仓库,仓库中的提供者 jar 可以被消费者使用。使用 idea 的 maven 窗口执行 install

2、创建 maven web模块 服务提供者

pom.xml




  4.0.0

  com.mycompany.dubbo
  dubbo-2-link-userservice-provider
  1.0.0
  war

  
    
    
      org.springframework
      spring-context
      5.1.4.RELEASE
    
    
      org.springframework
      spring-webmvc
      5.1.4.RELEASE
    

    
    
      com.alibaba
      dubbo
      2.6.2
    

    
    
      com.mycompany.dubbo
      dubbo-2-link-interface
      1.0.0
    

  

  
    
      
      
        maven-compiler-plugin
        3.1
        
          1.8
          1.8
        
      
    
  

dubbo-userservice-provider.xml




    
    

    
    

    
    

    
    


    
    

    


web.xml




	
		contextConfigLocation
		classpath:dubbo-userservice-provider.xml
	
	
		org.springframework.web.context.ContextLoaderListener
	

3、创建maven web 消费者模块

 pom.xml




  4.0.0

  com.mycompany.dubbo
  dubbo-2-link-consumer
  1.0.0
  war

  
    
    
      org.springframework
      spring-context
      5.1.4.RELEASE
    
    
      org.springframework
      spring-webmvc
      5.1.4.RELEASE
    

    
    
      com.alibaba
      dubbo
      2.6.2
    

    
    
      com.mycompany.dubbo
      dubbo-2-link-interface
      1.0.0
    

  

  
    
      
      
        maven-compiler-plugin
        3.1
        
          1.8
          1.8
        
      
    
  

applicationContext.xml




    
    

    
    

    
    
        
        
    

dubbo-consumer.xml




    
    

    
    

    
    
    

web.xml


		dispatcherServlet
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:applicationContext.xml,classpath:dubbo-consumer.xml
		
	
	
		dispatcherServlet
		/
	

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号