前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud 整合 Dubbo

SpringCloud 整合 Dubbo

作者头像
一切总会归于平淡
发布2022-11-07 15:18:22
6250
发布2022-11-07 15:18:22
举报

目录

1、介绍

2、代码实现

2.1 抽取公共模块

2.2 改造服务提供者

2.3 改造服务消费者

3、启动测试


1、介绍

Dubbo有两种使用方式:

1、基于SOA的思想,将一个单体架构拆分为web层和Services层,然后web和services借助Dubbo框架进行数据交互。 2、SpringCloud 整合Dubbo。

这篇博客所要介绍的就是第二种。

首先我们要想,为什么SpringCloud 要整合Dubbo?

在SpringCloud中会有多个微服务,不同的微服务访问一样的数据库,每个微服务都需要进行服务注册和服务发现,这个时候就要用到注册中心Nacos。

在微服务当中,各个服务之间如果要进行通信,要进行调用的话,使用的就是Feign。

那Feign这种协议究竟好不好呢?

Feign其实基于Http协议(应用层),调用的是REST风格的API 来完成数据交互容易成为性能瓶颈。

Dubbo框架的通信协议采用TCP协议(数据传输层)。

看下图:

我们可以看到Http 协议位于七层网络协议的应用层,TCP协议位于数据传输层,可以看到Http协议就是对TCP协议的封装,由于它做了更深层次的封装,所以它的效率可能就会低一些,特别是在高并发场景下性能可能会成为瓶颈。

所以这个时候,有的开发人员就会想了,既然Feign这个协议效率会存在瓶颈,我为什么不把Dubbo拿进来替换Feign呢?

哎,这个就是Dubbo 在SpringCloud 中的意义。

Dubbo框架的通信协议采用RPC协议来进行数据传输的,属于传输层协议,Dubbo默认通过Netty构造TCP长连接的方式进行通信,性能较高,使用SpringCloud整合Dubbo,那就是强强联合。

随着技术不断进步,现在Dubbo可以整合到Dubbo中去了。

借助Spring Cloud Alibaba提供了微服务开发的一站式解决方案,我们可以很轻松的完成Dubbo的整合。

在SpringCloud 中加入了 Dubbo,我们的架构整体就会发生了变化,我们的客户端请求网关,网关将请求路由到微服务,微服务呢需要进行注册中心的配置以及配置中心的管理,当然,各个微服务之间进行调用就不再是Feign,而是Dubbo。

2、代码实现

介绍完Dubbo在springcloud 中 的作用,接下来我们就进入代码实战。

这里使用的Demo是以前写过的。具体看这个专栏的文章:SpringCloud_一切总会归于平淡的博客-CSDN博客

以前我们是使用Feign进行服务之间的通信,现在我们将其改造为Dubbo。

2.1 抽取公共模块

抽取公共模块其实是比较简单的,我们来看看实现步骤:

1、创建dubbo-api模块

2、抽取公共模块

这里的实体类其实也可以放到另一个模块里然后进行引入,但是我太懒了,直接拉到dubbo-api模块来了,大家根据自己的习惯来吧。

2.2 改造服务提供者

我们接下来去修改user-service实现dubbo-api中的UserService接口。并使用@DubboService注解替换@Service对外暴露dubbo服务。

1、首先我们要先在user-service 中引入依赖。

代码语言:javascript
复制
<!--nacos注册中心的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--springcloud alibaba dubbo依赖   -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

<dependency>
  <groupId>com.jie.demo</groupId>
  <artifactId>dubbo-api</artifactId>
  <version>1.0</version>
</dependency>

2、编写UserService实现类。

这样我们就向外暴露一个Dubbo服务。

3、编写application.yml 文件

代码语言:javascript
复制
dubbo:
  protocol:
    name: dubbo
    port: 20881
  registry:
    address: spring-cloud://localhost   #使用SpringCloud中的注册中心
  scan:
    base-packages: com.jie.user.service  #dubbo中包扫描

2.3 改造服务消费者

1、首先在order-service 中引入依赖。

代码语言:javascript
复制
<!--nacos注册中心的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--springcloud alibaba dubbo依赖   -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

<dependency>
  <groupId>com.jie.demo</groupId>
  <artifactId>dubbo-api</artifactId>
  <version>1.0</version>
</dependency>

2、使用@DubboReference引入Dubbo服务,调用远程服务。

3、编写application.yml 文件

代码语言:javascript
复制
#dubbo配置
dubbo:
  registry:
    address: spring-cloud://localhost  #使用cloud的注册中心
  consumer:
    check: false   #dubbo默认有启动检查
    retries: 0     #dubbo内置的重试机制

3、启动测试

重启提供者和消费者的服务,然后发送一个请求测试。

注意:

实体类一定要实现序列化接口!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、介绍
  • 2、代码实现
    • 2.1 抽取公共模块
      • 2.2 改造服务提供者
        • 2.3 改造服务消费者
        • 3、启动测试
        相关产品与服务
        微服务引擎 TSE
        微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档