SpringCloudAlibaba&Dubbo整合

本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接

开篇

这是我参与更文挑战的第8天,活动详情查看: 更文挑战

Spring Cloud Netflix已经不流行了,因为它已经不维护更新了,也不是说它不能用,只是有比它更好更新的。那就是Spring Cloud Alibaba系列。下面是Spring Cloud Alibaba的特性描述:

image.png

使用的版本:

  • spring.boot.version:2.5.0 (目前最新)
  • spring-cloud-alibaba.version:2.2.1.RELEASE (目前最新)
  • dubbot: 2.7.6 (目前最新3.0.0)

关于项目结构

image.png
以上的项目结构就可以理解成是一个微服务项目了,一个父工程中包含了2个子工程。
顾名思义,shop-api中存放的是接口和接口对象
image.png
shop-service就是对于接口的实现。
image.png

和大多数项目开发的架构一样,没有太多区别。

关于POM依赖

shop-api 的 pom.xml

没有什么特别的地方,就是需要什么用什么,和本文的Spring Cloud Alibaba & Dubbo整合主题无关。

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>com.dove.jls</groupId>
        <artifactId>dove-common</artifactId>
    </dependency>
    <!--swagger api doc-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
    </dependency>
    <!--swagger api doc-->
    <!--参考 https://blog.csdn.net/w57685321/article/details/106783433/-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>
复制代码

shop-service 的 pom.xml

在shop-service中引入如下依赖,具有了dubbo和nacos相关的功能。

<!--整合spring cloud alibaba dubbo  -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!--整合spring cloud alibaba nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <!-- 解决 AnnotationConfigApplicationContext already exit-->
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
        </exclusion>
    </exclusions>
</dependency>
复制代码

这里没有明确版本号,是因为在父工程的pom.xml有相关定义

<dependencyManagement>
    <dependencies>
        <!--spring-cloud-alibaba 相关的依赖pom-->
        <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>
        <!--spring-boot 相关的依赖pom-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
复制代码

image.png

关于配置

具体介绍餐卡:dubbo配置参考手册

# 解决Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“
dubbo.application.id=shop-service
dubbo.application.name=shop-service
dubbo.registry.address=nacos://localhost:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.protocol.dispatcher=all
dubbo.protocol.threadpool=fixed
dubbo.protocol.threads=10
复制代码

异常情况

启动的时候报了关于Ribbon错误,想到是和请求相关,如果引入可以解决,

 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
复制代码

image.png
但是想到openFeignRibbon更好,所以试了试单独引入,问题解决。(3.0.3需要springboot版本2.4.x之上)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.0.3</version>
</dependency>
复制代码

效果

image.png

image.png

关注+点赞👍收藏❤️不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!