栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

dubbo(入门级别使用)

dubbo(入门级别使用)

目录

1. Dubbo概述

1.1 Dubbo简介

1.2 Dubbo架构

2. Zookeeper(服务注册中心)

2.1 Zookeeper介绍

2.2 安装Zookeeper

2.3 Zookeeper基本指令

3. Dubbo入门案例

3.1 服务提供方开发

3.1.1 项目整体架构

3.1.2 各个部分代码

3.2 服务消费方开发

 3.3 启动并测试

4.可能会遇到的问题(解决Dubbo无法发布被事务代理的Service问题 )

4.1 错误场景

4.2 错误提示

4.3 解决办法


1. Dubbo概述

1.1 Dubbo简介   Apache Dubbo 是一款高性能的 Java RPC 框架。其前身是阿里巴巴公司开源的、轻量级的开源 Java RPC 框架,可以和 Spring 框架无缝集成, 2018 年阿里巴巴把这个框架捐献给了 apache 基金会 . Dubbo 官网地址: http://dubbo.apache.org Dubbo 提供了三大核心能力:
  • 面向接口的远程方法调用
  • 智能容错和负载均衡
  • 以及服务自动注册和发现

1.2 Dubbo架构

图片来源于网络.

虚线都是异步访问,实线都是同步访问 蓝色虚线 : 在启动时完成的功能蓝色虚线 ( 实线 ) 都是程序运行过程中执行的功能 .

节点角色说明:
Dubbo架构
节点 角色名称
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
调用关系说明 :
0. 服务容器负责启动,加载,运行服务提供者。 1. 服务提供者在启动时,向注册中心注册自己提供的服务。 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失 败,再选另一台调用。 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2. Zookeeper(服务注册中心)

   通过前面的Dubbo架构图可以看到,Registry(服务注册中心)在其中起着至关重要的作用。Dubbo官 方推荐使用Zookeeper作为服务注册中心。

2.1 Zookeeper介绍 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。 为了便于理解 Zookeeper 的树型目录服务,我们先来看一下我们电脑的文件系统 ( 也是一个树型目录结 构 ) :

  我的电脑可以分为多个盘符(例如 C 、 D 、 E 等),每个盘符下可以创建多个目录,每个目录下面可以创建文件,也可以创建子目录,最终构成了一个树型结构。通过这种树型结构的目录,我们可以将文件分 门别类的进行存放,方便我们后期查找,而且磁盘上的每个文件都有一个唯一的访问路径.

 Zookeeper树型目录服务:

流程说明:
  • 服务提供者(Provider)启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的URL 地址
  • 服务消费者(Consumer)启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心(Monitor)启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址

2.2 安装Zookeeper

下载地址:http://archive.apache.org/dist/zookeeper/

Zookeeper 版本为 3.4.6 ,下载完成后可以获得名称为 zookeeper-3.4.6.tar.gz 的压缩文 件。

 安装步骤:

第一步:安装 jdk (略) 第二步:把 zookeeper 的压缩包( zookeeper-3.4.6.tar.gz )上传到 linux 系 统 第三步:解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr 第四步:进入 zookeeper-3.4.6 目 录,创建 data 目录 mkdir data 第五步:进入 conf 目录 , 把 zoo_sample.cfg 改名为 zoo.cfg cd conf mv zoo_sample.cfg zoo.cfg 第六步:打开 zoo.cfg 文件 , 修改 data 属性: dataDir=/usr/zookeeper- 3.4.6/data

2.3 Zookeeper基本指令

进入Zookeeper的bin目录,启动服务命令 

./zkServer.sh start 

停止服务命令

./zkServer.sh stop 

查看服务状态:

./zkServer.sh status 

客户端连接

./zkCli.sh 

3. Dubbo入门案例

3.1 服务提供方开发

3.1.1 项目整体架构

 

3.1.2 各个部分代码

maven



    4.0.0

    com.csh
    provider
    1.0-SNAPSHOT
    war

    
        UTF-8
        1.8
        1.8
        5.0.5.RELEASE
    
    
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-jms
            ${spring.version}
        
        
            org.springframework
            spring-context-support
            ${spring.version}
         
        
            com.alibaba
            dubbo
            2.6.0
        
        
            org.apache.zookeeper
            zookeeper
            3.4.7
        
        
            com.github.sgroschupf
            zkclient
            0.1
        
        
            javassist
            javassist
            3.12.1.GA
        
        
            com.alibaba
            fastjson
            1.2.47
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.3.2
                
                    1.8
                    1.8
                
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                 
                    8081 
                    /
                
            
        
    

applicationContext-service.xml



    
    
    
    
    
    
    
    
HelloService 
public interface HelloService {

    public String sayHello(String name);
}

HelloServiceImpl

@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello : "+name;
    }
}

 

3.2 服务消费方开发

3.2.1 项目整体架构

maven



    4.0.0

    com.csh
    consumer
    1.0-SNAPSHOT
    war

    
        UTF-8
        1.8
        1.8
        5.0.5.RELEASE
    
    
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-jms
            ${spring.version}
        
        
            org.springframework
            spring-context-support
            ${spring.version}
         
        
            com.alibaba
            dubbo
            2.6.0
        
        
            org.apache.zookeeper
            zookeeper
            3.4.7
        
        
            com.github.sgroschupf
            zkclient
            0.1
        
        
            javassist
            javassist
            3.12.1.GA
        
        
            com.alibaba
            fastjson
            1.2.47
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.3.2
                
                    1.8
                    1.8
                
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                 
                    8082 
                    /
                
            
        
    

applicationContext-web.xml



    
    
    
    




    
    

web.xml 



    Archetype Created Web Application
    
        contextConfigLocation
        classpath:applicationContext*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    .
   
       SpringMVC
        org.springframework.web.servlet.DispatcherServlet
       
           contextConfigLocation
           classpath:applicationContext-web.xml
       
   
    
        SpringMVC
        /
    

 

HelloController

@RestController
@RequestMapping("/demo")
public class HelloController {
    @Reference
    private HelloService helloService;

    @RequestMapping("/hello")
    public String sayHello(String name){
        String result = helloService.sayHello(name);
        System.out.println(result);
        return  result;
    }
}

 

HelloService

public interface HelloService {

    public String sayHello(String name);
}

 

 3.3 启动并测试

首先启动zookeeper

./zkServer.sh start   //启动zookeeper

./zkCli.sh                //与客户端连接

然后启动 provider

最后启动 consumer

使用浏览器   访问 

localhost:8082/demo/hello?name=csh

出现结果

 证明   测试成功

4.可能会遇到的问题(解决Dubbo无法发布被事务代理的Service问题 )

4.1 错误场景 连接的数据库 了,且在Service层上加入 @Transactional 注解

 

4.2 错误提示
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
	org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:982)
	org.springframework.web.servlet.frameworkServlet.doGet(frameworkServlet.java:866)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	org.springframework.web.servlet.frameworkServlet.service(frameworkServlet.java:851)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

4.3 解决办法

4.3.1 步骤一

  修改applicationContext-service.xml配置文件,开启事务控制注解支持时指定proxy-target-class

属性,值为true。其作用是使用cglib代理方式为Service类创建代理对象

 

class="true"/>

4.3.2 步骤二

  修改HelloServiceImpl类,在Service注解中加入interfaceClass属性,值为HelloService.class,

作用是指定服务的接口类型

@Service(interfaceClass = HelloService.class)

@Transactional

  public class HelloServiceImpl implements HelloService {

   public String sayHello(String name) {

          return "hello " + name;

}

4.3.3 测试 问题得到成功解决

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

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

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