概述

Apache Dubbo 是一款高性能的、基于Java的开源RPC框架,它提供了以下特性:

  • 基于接口的远程方法调用
  • 智能负载均衡
  • 服务自动注册和发现
  • 高可扩展性
  • 运行期流量调度
  • 可视化的服务治理

架构


(0)provider基于dubbo容器启动

(1)provider注册到注册中心(Nacos)

(2)consumer订阅注册中心的服务变化

(3)注册中心将服务变化结果异步地通知给consumer

(4)consumer直接调用provider接口

(5)monitor监控流量请求数据

Spring Cloud Alibaba 整合 Dubbo

创建主工程

创建一个空的工程,pom配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><properties><project.version>1.0-SNAPSHOT</project.version><spring-cloud.version>Greenwich.SR6</spring-cloud.version><spring-cloud-alibaba.version>2.1.3.RELEASE</spring-cloud-alibaba.version></properties><modules><module>hello-dubbo-provider</module><module>hello-dubbo-consumer</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Dubbo --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!-- Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
</project>

创建provider子工程:hello-dubbo-provider

在alibaba-dubbo工程下,创建子工程,pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>hello-dubbo-provider</artifactId><packaging>pom</packaging><modules><module>hello-dubbo-provider-api</module><module>hello-dubbo-provider-service</module></modules>
</project>

在hello-dubbo-provider工程下,创建hello-dubbo-provider子工程。目的是定义接口,后续consumer会引用该工程,然后就能直接调用provider借口了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-api</artifactId><packaging>jar</packaging></project>

创建接口类EchoService:

package com.train.dubbo.provider.api;public interface EchoService {String echo(String name);
}

这样api工程就完成了,很简单

在hello-dubbo-provider工程下,创建hello-dubbo-provider-service子工程。该工程是api工程的具体实现,因此必须依赖上一步创建的api工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-service</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

创建EchoServiceImpl实现EchoService接口

package com.train.dubbo.provider.service;import com.train.dubbo.provider.api.EchoService;
import org.apache.dubbo.config.annotation.Service;@Service(version = "1.0.0")
public class EchoServiceImpl implements EchoService {@Overridepublic String echo(String name) {return "Dubbo Hello:" + name;}
}

注意:@Service注解必须引用dubbo的Service,而不是spring,不要弄错了

创建Application启动类

@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}

配置application.yml,前提必须安装好nacos,还没安装的童鞋参考前面的文章

spring:application:name: dubbo-providermain:allow-bean-definition-overriding: truecloud:nacos:discovery:server-addr: 192.168.25.131:8848dubbo:scan:base-packages: com.train.dubbo.provider.serviceprotocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848
server:port: 8010

整个provider工程结构如下

启动provider-service,然后查看Nacos,确认服务是否注册

在主工程下创建hello-dubbo-consumer消费者工程,因为要消费provider接口,所以依赖provider-api工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-consumer</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>${project.parent.version}</version></dependency></dependencies>
</project>

创建controller接口以便测试

@RestController
public class EchoController {@Reference(version = "1.0.0")private EchoService echoService;@GetMapping("/echo/{name}")public String echo(@PathVariable String name){return echoService.echo(name);}
}

创建启动类

@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);}
}

配置application.yml

server:port: 8020dubbo:protocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848scan:base-packages: com.train.dubbo.consumer.controllercloud:subscribed-services: dubbo-provider
spring:application:name: dubbo-consumercloud:nacos:discovery:server-addr: 192.168.25.131:8848main:allow-bean-definition-overriding: true

然后同样启动consumer工程,再确认Nacos

附上整个工程结构:

测试

在浏览器输入http://localhost:8020/echo/zhangsan,能正常输出provider-service实现的接口内容,就说明正常运行

7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用相关推荐

  1. 8.Spring Cloud Alibaba教程:整合Seata分布式事务

    概述 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 更多的介绍可以参考官方文档:Seata快速入门 本篇主要是介绍Spring Cloud Alibaba ...

  2. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用

    官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...

  3. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

  4. 1.Spring Cloud Alibaba教程:简介

    概述 2018年10月31日,SpringCloudAlibaba 正式入驻 SpringCloud 官方孵化器,并在 Maven 中央库发布第一个版本. Spring Cloud for Aliba ...

  5. Spring Cloud Alibaba 同时兼容dubbo与openfeign

    一.前言 dubbo与springcloud都可以单独作为微服务治理框架在生产中进行使用,但使用过springcloud的同学大概了解到,springcloud生态的相关组件这些年已经逐步停更,这就导 ...

  6. 3.Spring Cloud Alibaba教程:Nacos服务注册与发现

    概要 官网地址:Nacos官网和帮助文档 Nacos安装:Linux安装Nacos1.3.1(还没安装的先看这篇文章安装) Nacos主要作用:服务注册与发现.配置管理 本篇主要介绍的是服务注册与发现 ...

  7. 5.Spring Cloud Alibaba教程:Nacos整合Feign

    概述 Feign是一个声明式的http客户端.使用Feign只需要创建接口并加上对应的注解,就可以实现类似RestTemplate方式的调用,只是它将底层的http请求代码隐藏起来.另外,Feign默 ...

  8. 4.Spring Cloud Alibaba教程:Nacos配置管理

    概述 Nacos作为配置中心,跟传统的配置文件不同.它可以实现线上修改配置,实时生效,中间不需要重启任何应用. 知识点 Nacos通过Namespace.Group.DataID来做多环境配置,他们之 ...

  9. 回顾:oauth2和 spring cloud alibaba gateway 整合

    一.oauth2认证中心:登录用户进行认证,生成token, 同时定义受保护的api服务 (一)oauth2的四种认证模式:授权码模式,简化模式,密码模式,客户端模式.其中授权码模式和密码模式用的最多 ...

最新文章

  1. Android模拟器环境下SD卡内容的管理[转]
  2. jcifs java_Java 使用JCIFS访问网络文件共享的工具类
  3. 使软件可二次开发_基于C++的?UG二次开发
  4. ForeignKey和ManyToManyField的限制关系
  5. pyppeteer:比 selenium 更高效的爬虫利器
  6. javascript提醒
  7. Flutter实战之自定义日志打印组件
  8. java环境安装菜鸟教程,Java基础教程---JDK的安装和环境变量的配置
  9. 字符集,字体,编码,代码页,输入法
  10. HealthKit Swift 教程: 开始
  11. c语言的sin cos是弧度,C++中cos,sin,asin,acos這些三角函數操作的是弧度,而非角度(轉)...
  12. 图新地球为什么很模糊,白球、看图、下载问题深度剖析
  13. 北京大学计算机学硕考研分数线,2020北京大学研究生分数线汇总(含2016-2020历年复试)...
  14. c语言中short作用,详解C语言中整数(short,int,long)
  15. idea中还原dont ask again
  16. Router中如何设置光标以全屏十字架显示
  17. 【MySQL】数据库表操作
  18. Quantopian单因子分析工具:Alphalens
  19. ConvertUtils
  20. python阿凡提与国王下棋_阿基米德与国王下棋的故事

热门文章

  1. JCO3远程调用SAP接口随笔一(配置连接池)
  2. 10、Power Query-合并查询与追加查询结合应用
  3. 历届冬奥会举办地与举办时间
  4. 一个现金流量表的代码
  5. ABAP Text edit使用
  6. 会计期间13-16怎么用
  7. 护航华油信通危化品运输,“共和国长子”背后的数字化力量
  8. 共赴CIO时代,永洪BI如何推动企业数字化转型与创新?
  9. mysql事物 总结_Mysql事务总结
  10. python区间分组_python-进行分组时保留其他列