文章目录

  • 快速入门
  • 配置Nacos注册中心
  • Dubbo-Spring-Cloud
    • 概述
    • 快速使用
    • dubbo-cloud-provider-api 依赖含义
  • 参考链接

快速入门

场景:提供provider,consumer,通过RPC远程调用使得consumer能够调用provider中的服务。
实现:创建三个模块:apache-dubbo-provider-api, apache-dubbo-provider-sample, apache-dubbo-consumer-sample
其中apache-dubbo-provider-api描述了对外提供的服务,需要provider进行实现,consumer进行订阅;

不使用注册中心的方式进行调用

使用原生spring XML文件形式进行配置,Maven项目导入dubbo依赖:

<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.16</version>
</dependency>

#apache-dubbo-provider-api

public interface ProviderService {String login(String username, String password);String sayHello(String username);
}

#apache-dubbo-provider-sample 具体方法实现

public class ProviderServiceImpl implements ProviderService{@Overridepublic String login(String username, String password) {if ("admin".equals(username) && "admin".equals(password)) {return sayHello(username);}return "登录失败";}@Overridepublic String sayHello(String username) {return username + " 您好!";}
}

编写application.xml文件,方便启动时加载,将文件放到 resources/META-INF 目录下

    <!--    定义协议和端口--><dubbo:protocol name="dubbo" port="20880"/><!--    对外暴露应用--><dubbo:application name="dubbo-provider"/><!--注册中心地址:N/A表示直连--><dubbo:registry address="N/A"/><!--    暴露服务--><dubbo:service interface="com.righteye.service.ProviderService" ref="provider-login"/><!--    暴露的实例对象--><bean id="provider-login" class="com.righteye.service.ProviderServiceImpl"/>

可以使用dubbo中提供的启动类启动项目:

import org.apache.dubbo.container.Main;public class ProviderApplication {public static void main(String[] args) {Main.main(args);}
}

项目启动后:

#apache-dubbo-provider-consumer

编写application.xml文件

<dubbo:application name="dubbo-consumer"/><dubbo:registry address="N/A"/><dubbo:reference id="serviceLogin" interface="com.righteye.service.ProviderService"url="dubbo://192.168.220.1:20880/com.righteye.service.ProviderService"/>

这里的url写provier运行成功后的日志内容

测试内容:

@Test
public void testDubboRemoteCall() {ProviderService providerService = null;String config = "classpath:application.xml";ApplicationContext ac = new ClassPathXmlApplicationContext(config);providerService = (ProviderService) ac.getBean("serviceLogin");String res = providerService.login("admin", "admin");System.out.println(res);
}

配置Nacos注册中心

Dubbo可支持多种注册中心,如 Zookeeper, Eureka, Nacos
通过注册中心,provider将服务进行注册而consumer进行订阅,灵活性更高
引入Nacos依赖

<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.4.2</version>
</dependency>

修改provider和consumer的配置文件
#apache-dubbo-provider-sample

 <!--    定义协议和端口--><dubbo:protocol name="dubbo" port="20880"/><!--    对外暴露应用--><dubbo:application name="dubbo-provider"/><!--注册中心地址:修改注册中心地址成Nacos服务--><dubbo:registry address="nacos://192.168.189.130:8848"/><!--    暴露服务--><dubbo:service interface="com.righteye.service.ProviderService" ref="provider-login"/><!--    暴露的实例对象--><bean id="provider-login" class="com.righteye.service.ProviderServiceImpl"/>

#apache-dubbo-consumer-sample

 <dubbo:application name="dubbo-consumer"/><dubbo:registry address="nacos://192.168.189.130:8848"/><!-- 引入Nacos后,不需要url进行指定服务 --><dubbo:reference id="serviceLogin" interface="com.righteye.service.ProviderService"/>

除上述外其他代码不需要改变
Nacos中注册内容:

Dubbo-Spring-Cloud

概述

dubbo 重新更新后与SpringCloud结合的产物,继承了SpringCloud微服务环境的优势。
传统的SpringCloud中使用远程调用的组件时Feign,该组件基于Http,默认每次调用采用短链接,因此每一次请求都需要重新建立TCP,导致效率低下。而RPC是基于TCP,作用于传输层。
使用SpringCloud Dubbo的理想状态是对外采用RestFul(HTTP),内部远程调用使用RPC,提高性能。

快速使用

场景:搭建微服务环境 dubbo-cloud-provider-api, dubbo-cloud-provider-sample, dubbo-cloud-consumser-sample
环境: 微服务 - springboot 2.4.3 spring-cloud 2020.0.1 spring-cloud-alibaba 2021.0.1

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><spring.cloud.version>2020.0.1</spring.cloud.version><spring.cloud.alibaba.version>2021.1</spring.cloud.alibaba.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><scope>import</scope><type>pom</type></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement>

#dubbo-cloud-provider-api
同样作为接口工厂,用来约束暴露/订阅的内容;同时管理maven项目中的依赖
pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- 处理异常:Failed to instantiate [feign.jaxrs2.JAXRS2Contract]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/ws/rs/Path --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId><version>2.2.5.RELEASE</version></dependency>
</dependencies>

#dubbo-cloud-provider-sample

pom.xml

<!-- 导入 provider-api 项目 -->
<dependency><groupId>com.righteye</groupId><artifactId>dubbo-cloud-provider-api</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

接口实现类:

@DubboService
public class DubboCloudServiceImpl implements DubboCloudService{@Overridepublic String sayHello() {return "hello dubbo-spring-cloud";}
}

配置文件 application.yaml

server:port: 10056dubbo:# 服务名称application:name: dubbo-cloud-provider# 协议和端口protocol:port: 20880name: dubbo# 注册中心registry:address: spring-cloud://${righteye.addr}:8848# 需要扫描的基准包scan:base-packages: com.righteye.service
spring:application:name: dubbo-cloud-providercloud:nacos:discovery:server-addr: ${righteye.addr}:8848righteye:addr: 192.168.189.xxx

#dubbo-cloud-provider-sample

配置文件application.yaml

server:port: 10057spring:application:name: dubbo-cloud-consumercloud:nacos:discovery:server-addr: ${righteye.addr}:8848
dubbo:application:name: ${spring.application.name}registry:address: spring-cloud://${spring.cloud.nacos.discovery.server-addr}protocol:name: dubboport: -1righteye:addr: 192.168.189.xxx

测试类:

@RestController
public class TestController {@DubboReferenceprivate DubboCloudService dubboCloudService;@GetMapping("/hello")public String testSayHello() {return dubboCloudService.sayHello();}
}

dubbo-cloud-provider-api 依赖含义

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

启动带有内置tomcat容器的springboot项目,不添加该依赖后续即使启动成功也不存在web容器。

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

dubbo-spring-cloud的启动器,含spring-cloud与dubbo整合的相关依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

Nacos服务注册中心

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>

如果不引入commons-lang3的话会报错: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils。但是在2018年的时候就提示已经移除了commons-lang3,详见[dubbo-1920] remove commons-lang3 dependency by beiwei30 · Pull Request #1921 · apache/dubbo · GitHub

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId><version>2.2.5.RELEASE</version>
</dependency>

处理异常:Failed to instantiate [feign.jaxrs2.JAXRS2Contract]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/ws/rs/Path

参考链接

dubbo文档:
dubbo3.x Java JDK入门

https://github.com/apache/dubbo-spring-boot-project

spring-cloud整合dubbo案例

解决方案:
SpringCloudAlibaba版本升级遇到的问题

解决升级 Spring Boot 2.6后,因循环引用导致启动时报错的问题

使用spring cloud,nacos,dubbo,gateway搭建微服务

【Dubbo】入门搭建相关推荐

  1. Dubbo入门----搭建一个最简单的Demo框架

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. ...

  2. Dubbo入门---搭建一个最简单的Demo框架

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. ...

  3. Dubbo:Dubbo入门---搭建一个最简单的Demo框架

    https://blog.csdn.net/noaman_wgs/article/details/70214612 Dubbo是什么 Dubbo是: 一款分布式服务框架 高性能和透明化的RPC远程服务 ...

  4. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbo zookeeper 更多 个人分类: ...

  5. 说一下dubbo项目简单的搭建过程_dubbo学习(1)--简单的入门搭建实例

    1 简介 dubbo是一个分布式服务框架,由阿里巴巴的工程师开发,致力于提供高性能和透明化的RPC远程服务调用.可惜的是该项目在2012年之后就没有再更新了,之后由当当基于dubbo开发了dubbox ...

  6. dubbo入门--Hello World

    Dubbo入门--Hello World 转载自:http://blog.csdn.net/hanmov/article/details/66973957?locationNum=2&fps= ...

  7. Dubbo入门Demo

    2019独角兽企业重金招聘Python工程师标准>>> 1.Dubbo简单介绍 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方 ...

  8. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  9. Dubbo入门(2) - 简单实践

    作者:不洗碗工作室 - Marklux 出处:Dubbo入门(2) - 简单实践 版权归作者所有,转载请注明出处 在了解什么是分布式框架之后,我们需要上手实践一下,来了解整个系统是如何运作起来的. 本 ...

  10. Dubbo入门(一)

    目录 一.Dubbo核心概念 1.简介 2.基本概念 3.Dubbo环境搭建(windows) (1)安装zookeeper (2)安装dubbo-admin管理控制台 二.快速入门 gmail-in ...

最新文章

  1. 吴恩达机器学习 Coursera 笔记(二) - 单变量线性回归
  2. VMware 11 安装Mac 10.9
  3. 高等数理统计(part1)--随机变量及其分布函数
  4. java策略设计模式_Java中的策略设计模式
  5. Istio 网关之南北向流量管理
  6. 找到bug的根源,问五次为什么
  7. 7. 整数反转(C, C++, Python)
  8. UItextField 的属性
  9. mysql数据库事务的概念_如何理解数据库事务中的一致性的概念?
  10. cpio备份linux系统,linux cpio 备份命令
  11. vs2010调用python的方法
  12. NLP学习02--卷积神经网络CNN
  13. p2p服务器连接状态,P2P网络老是连接不上怎么回事
  14. Linux期末复习总结
  15. 规范-阿里代码规范设置
  16. MAVEN常用知识点总结
  17. 算法 思维导图(一)
  18. 8个高质量免抠素材网站
  19. FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecate;的解决办法
  20. 《高性能MySQL》 第三章 服务器性能剖析 读书笔记

热门文章

  1. onpageshow 用户浏览网页时触发
  2. 网络对抗 Exp8 Web基础 20154311 王卓然
  3. 如何判断是否适合学编程?
  4. 详细到吐血 —— 树莓派驱动开发入门:从读懂框架到自己写驱动
  5. linux 拼图游戏,2020经典宝石拼图
  6. 基于python的数字图像处理--学习笔记(三)
  7. 抽象类:小样儿(接口),我一眼看出你就不是人(抽象类)
  8. 一文带你吃透 strcpy 函数
  9. 简单温习一下快速排序
  10. web 服务端与客户端交互