SpringCloud 整合 Dubbo

目录

1、介绍

2、代码实现

[2.1 抽取公共模块](#2.1 抽取公共模块)

[2.2 改造服务提供者](#2.2 改造服务提供者)

[2.3 改造服务消费者](#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,那就是强强联合。

借助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 中引入依赖。

复制代码
<!--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 文件

复制代码
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 中引入依赖。

复制代码
<!--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 文件

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

3、启动测试

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

注意:

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

相关推荐
小旭952715 小时前
Spring AI Alibaba 从入门到实战:一站式掌握企业级 AI 应用开发
java·人工智能·spring
云烟成雨TD16 小时前
Spring AI 1.x 系列【50】可观测性:接入 Prometheus + Grafana
人工智能·spring·prometheus
phltxy18 小时前
MCP 从协议到 Spring AI 实战
人工智能·spring·oracle
Volunteer Technology20 小时前
SpringSecurity请求流转的本质
java·spring
云烟成雨TD21 小时前
Spring AI 1.x 系列【42】MCP 服务端 Spring Boot 启动器
java·人工智能·spring
云烟成雨TD21 小时前
Spring AI 1.x 系列【38】模型上下文协议(MCP)
java·人工智能·spring
Alson_Code21 小时前
Spring AI-1.1.0
java·人工智能·后端·spring·ai编程
小小放舟、21 小时前
@JsonCreator 注解详解——从枚举反序列化说起
spring boot·spring·spring cloud·java-ee·maven·intellij-idea·状态模式
摇滚侠1 天前
Spring 零基础入门到进阶 入门 06-10
java·spring·intellij-idea
JAVA面经实录9171 天前
Spring Cloud Alibaba 微服务企业实战完整文档(架构+规范+调优+故障+源码)
java·运维·spring cloud·微服务