1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SpringBoot整合dubbo详解(阿里官方dubbo-spring-boot-starter)

SpringBoot整合dubbo详解(阿里官方dubbo-spring-boot-starter)

时间:2020-08-12 19:34:09

相关推荐

SpringBoot整合dubbo详解(阿里官方dubbo-spring-boot-starter)

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo 的RPC 调用流程主要涉及到4个模块:

1、Registry:服务注册,我们一般会采取Zookeeper 作为我们的注册中心

2、Provider:服务提供者(生产者),提供具体的服务实现

3、Consumer:消费者,从注册中心中订阅服务

4、Monitor:监控中心,RPC调用次数和调用时间监控

从上图中我们可以看出RPC 服务调用的过程主要为:

1、生产者发布服务到服务注册中心

2、消费者在服务注册中心中订阅服务

3、消费者调用已注册的服务

下面笔者给大家讲解在IDEA环境下如何实现将SpringBoot与Dubbo整合。

项目结构如图:

先来看common下的pom文件:

<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.boot.dubbo</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>common</name><url></url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--dubbo-springBoot依赖--><dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>1.0.1</version></dependency><!--zookeeper依赖--><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.11</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency></dependencies><modules><module>api</module><module>provider</module><module>consumer</module></modules></project>

由上图可以看出公共pom主要引入了: SpringBoot依赖,dubbo-springBoot依赖,zookeeper依赖,zkClient依赖等。

下面笔者将逐个讲解各个模块:

一、 provider(服务提供者)

pom文件如下:

<?xml version="1.0"?><project xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.boot.dubbo</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>provider</artifactId><name>provider</name><url></url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

因为笔者将provider作为web形式启动,所以仅需要引入spring-boot-starter-web即可。

项目结构:

src/main/resources/application.yml配置如下:

server:port: 8081spring:dubbo:appname: providerregistry: zookeeper://127.0.0.1:2181protocol: dubboport: 20880

接口定义IBookService.java代码如下:

package com.boot.dubbo.service;public interface IBookService {String sayHello();}

接口实现BookServiceImpl.java代码如下:

package com.boot.dubbo.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.boot.dubbo.service.IBookService;@Service@org.springframework.stereotype.Servicepublic class BookServiceImpl implements IBookService {@Overridepublic String sayHello() {return "Hello World";}}

注意该类有两个service注解,一个是alibaba的,一个是spring的,大家要注意区分。

Application.java代码如下:

package com.boot.dubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;@SpringBootApplication@EnableDubboConfigurationpublic class Application {public static void main( String[] args ){SpringApplication.run(Application.class, args);}}

springBoot启动加入了@EnableDubboConfiguration,表示启动dubbo配置。

注意,在本地测试之前,必须先下载zookeeper在本地,然后启动zookeeper,然后运行provider模块,使服务注册到zookeeper!

二、consumer(服务消费者)

pom文件如下:

<?xml version="1.0"?><project xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.boot.dubbo</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>consumer</artifactId><name>consumer</name><url></url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies></dependencies></project>

consumer没有引入任何依赖,因为该模块只有接口定义,没有实现。

结构如下:

三、api(测试接口)

pom文件如下:

<?xml version="1.0"?><project xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.boot.dubbo</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>api</artifactId><name>api</name><url></url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.boot.dubbo</groupId><artifactId>consumer</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>

api只需要引入consumer模块(只有接口定义,没有实现,没有application.yml)即可。

项目结构如下:

src/main/resources/application.yml配置如下:

spring:dubbo:appname: consumerregistry: zookeeper://127.0.0.1:2181protocol: dubboport: 20880

DubboController.java代码如下:

package com.boot.dubbo.api.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import com.alibaba.dubbo.config.annotation.Reference;import com.boot.dubbo.service.IBookService;@RestControllerpublic class DubboController {@ReferenceIBookService bookService;@GetMapping("test")public String testDubbo() {return bookService.sayHello();}}

在调用consumer模块定义的service的时候,必须要加入@Reference注解。

Application.java代码如下:

package com.boot.dubbo.api;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;@SpringBootApplication@EnableDubboConfigurationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

@EnableDubboConfiguration表示启动dubbo配置。

下面开始进行测试(必须先将本地zookeeper启动):

1、首先将provider模块启动:

2、启动api:

3、访问: http://localhost:8080/test

可以看到"Hello World",说明调用service成功!

扫一扫关注笔者的公众号,每天都有干货分享,你还在等什么

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。