0
点赞
收藏
分享

微信扫一扫

dubbo(入门级别使用)

夕阳孤草 2022-01-06 阅读 65

目录

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

服务运行容器

调用关系说明 :

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 的压缩文

件。

 安装步骤:

2.3 Zookeeper基本指令

进入Zookeeperbin目录,启动服务命令 

./zkServer.sh start 

停止服务命令

./zkServer.sh stop 

查看服务状态:

./zkServer.sh status 

客户端连接

./zkCli.sh 

3. Dubbo入门案例

3.1 服务提供方开发

3.1.1 项目整体架构

 

3.1.2 各个部分代码

maven

applicationContext-service.xml

HelloService 

HelloServiceImpl

3.2 服务消费方开发

3.2.1 项目整体架构

maven

applicationContext-web.xml

web.xml 

HelloController

HelloService

 3.3 启动并测试

首先启动zookeeper

然后启动 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类创建代理对象

4.3.2 步骤二

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

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

4.3.3 测试

问题得到成功解决

举报

相关推荐

0 条评论