首页 > 其他分享 >SpringCloud 集成和使用 Dubbo

SpringCloud 集成和使用 Dubbo

时间:2023-07-15 21:33:45浏览次数:44  
标签:集成 dubbo Dubbo SpringCloud boot pom spring com cloud

SpringCloud 是当前比较流行的微服务开发框架,因此很有必要介绍一下 SpringCloud 集成和使用 Dubbo 技术。本篇博客在上一篇博客的 Demo 基础上,对 pom 文件和 yml 配置文件进行了修改,就可以完成 SpringCloud 集成和使用 Dubbo 的 Demo。是的,你没有看错,没有修改代码,只是修改了 pom 文件和 yml 。由此可见 SpringCloud 集成和使用 Dubbo 是很容易的。

当然为了区分上篇博客的 demo ,我还是把项目工程的名字修改了一下,跟上篇博客的 Demo 源代码以示区分。由于代码没有进行更改,因此本篇博客不再列出具体的代码细节,可以在本篇博客的最后下载源代码进行查看和测试。


一、搭建工程

本篇博客仍然采用 Nacos 为注册中心,因此需要搭建 Nacos,我之前已经在自己的虚拟机中搭建了单机版 Nacos,虚拟机的 ip 地址是 192.168.216.128,搭建好之后默认不需要登录就可以访问,端口是 8848,这里全都保持不变。

把上一篇博客的 Demo 复制一份过来,修改了项目工程的名称,修改后的结果如下:

image

common_cloud 是抽取出来的公共项目,里面是公用的实体类和接口方法

provider_cloud 是 dubbo 服务接口的提供者,实现 dubbo_common 中定义的接口

consumer_cloud 是 dubbo 服务的消费者,用来调用 dubbo 服务提供的 tcp 接口


二、父工程的 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>

    <groupId>com.jobs</groupId>
    <artifactId>springcloud_dubbo</artifactId>
    <version>1.0</version>
    <modules>
        <module>common_cloud</module>
        <module>provider_cloud</module>
        <module>consumer_cloud</module>
    </modules>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--引入 springCloud alibaba 依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

对于父工程来说,需要注意 SpringBoot 和 SpringCloud 的版本对应关系,版本不匹配的话,就会走弯路。

  • 这里使用的是 SpringCloud alibaba 版本是 2.2.5.RELEASE
  • 这里使用的 SpringBoot 版本是 2.3.9.RELEASE

lombok 是子工程都使用的依赖,直接在父工程中引入,主要使用其日志记录功能,以及创建实体对象时省略 get 和 set 方法。


三、Provider 的 pom 和 yml

Provider 的 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">
    <parent>
        <artifactId>springcloud_dubbo</artifactId>
        <groupId>com.jobs</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider_cloud</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--如果该 springboot 程序只是做 dubbo 的服务端提供 tcp 接口,
        不对外提供 http 接口的话,那么只需要引用 springboot 的起步依赖即可。-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--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.jobs</groupId>
            <artifactId>common_cloud</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

Provider 的 yml 配置文件内容如下:

spring:
  application:
    name: provider-cloud
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.216.128:8848

# 配置 dubbo 提供者信息:采用 dubbo 协议,指定服务的 tcp 端口
dubbo:
  protocol:
    name: dubbo
    port: 22222
  # 使用 nacos 作为注册中心
  registry:
    #使用springcloud中注册中心的地址
    address: spring-cloud://192.168.216.128
  # dubbo 扫描服务接口的包,一般扫描接口所在的包即可
  scan:
    base-packages: com.jobs.service

这里需要注意的是:由于 Provider 微服务已经配置了 Nacos 的地址:192.168.216.128:8848 ,因此对于 Dubbo 来说,其向 Nacos 注册时使用微服务的注册地址就可以了,写法为:spring-cloud://192.168.216.128 ,不需要写端口信息。


四、Consumer 的 pom 和 yml

Consumer 的 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">
    <parent>
        <artifactId>springcloud_dubbo</artifactId>
        <groupId>com.jobs</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>consumer_cloud</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--这里的 dubbo 消费者对外提供 http 接口,用于通过浏览器测试,
        因此引入了 springboot web 的依赖包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--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.jobs</groupId>
            <artifactId>common_cloud</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.9.RELEASE</version>
            </plugin>
        </plugins>
    </build>
</project>

由于在父工程中使用的 SpringBoot 版本是 2.3.9.RELEASE ,因此这里的 spring-boot-maven-plugin 版本就保持跟父工程的 SpringBoot 版本一致了。然后再看一下 Consumer 的 yml 配置内容:

server:
  port: 8888
spring:
  application:
    name: consumer-cloud
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.216.128:8848

# 配置 dubbo 消费者信息
dubbo:
  registry:
    address: spring-cloud://192.168.216.128
  consumer:
    # 关闭了启动检查,这样消费者启动时,不会到 nacos 中检查服务提供者是否存在
    check: false
    # 建议在这里统一配置为不重试请求,对于查询来说可以在代码中单独配置重试次数
    retries: 0
    # 默认情况下限制请求必须在 1000 毫秒内完成,对于具体服务可以在代码中单独配置
    timeout: 1000

这里有关 Dubbo 的注册地址配置跟 Provider 配置的写法是一样。


五、验证成果

启动 Provider 和 Consumer 两个微服务,然后打开 Nacos 就可以看到,如下所示:

image

在浏览器地址栏上输入链接,比如:http://localhost:8888/emp/666 就能看到返回结果:

image


本篇博客的源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/springcloud_dubbo.zip

标签:集成,dubbo,Dubbo,SpringCloud,boot,pom,spring,com,cloud
From: https://www.cnblogs.com/studyjobs/p/17556990.html

相关文章

  • SpringBoot中集成jasypt-spring-boot实现配置文件数据加密脱敏
    场景经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url、用户名、密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢。除了使用手动将加密之后的配置写入到配置文件中,提取的时候再手动解密的方式,还可以使用如下方式。jas......
  • Spring Boot项目集成OpenFeign
    在pom.xml文件中加入openfeign依赖<!--服务调用feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>定义Feign接口,使用@FeignClient注解指定服务......
  • 什么是持续集成和持续交付领域的 pipeline 概念
    在软件开发中,Pipeline是一种自动化的过程,它包括从开发人员提交代码,到代码构建,测试,部署等一系列的步骤。在持续集成(ContinuousIntegration)/持续部署(ContinuousDeployment)领域,Pipeline是非常重要的,因为它可以帮助开发团队更快,更有效地构建,测试和部署软件。首先,让我们详细了解下......
  • springcloud启动后读取不到nacos上启动文件
    问题:在确认nacos和jar包都启动成功后,却并没有读取到nacos配置中心的内容。解决:检查java项目的bootstrap.yml配置文件。spring:application:name:testmain:allow-bean-definition-overriding:truecloud:#配置中心config:server-add......
  • jenkins持续集成
    1.jenkins简介  用于持续自动的构建、测试软件项目,监控外部任务的运行,Java语言编写   意义:任一环节都是自动完成,有利于软件发展趋势,节省开发测试时间   CI/CD:持续集成、持续交付。   持续集成定义:一个自动化构建的过程2.jenkins组件   一个自动构建的......
  • 在Docker上实战ElasticSearch以及与SpringBoot集成
    简介项目地址:https://gitee.com/charlinchenlin/wysmallElasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elastic......
  • NestJs 集成 OIDC
    要将OIDC集成到NestJS中,可以按照以下步骤进行操作:首先,确保已经安装了@nestjs/passport和passport这两个依赖包,以便使用Passport和OIDC策略。npminstall--save@nestjs/passportpassport然后,安装用于OIDC的Passport策略包。这里以passport-openidconnect......
  • SpringCloud 之OpenFeign 自定义配置和使用/自定义拦截器
    转:SpringCloud之OpenFeign自定义配置和使用/自定义拦截器   ......
  • idea运行SpringCloud项目时,一些微服务的图标是灰色的,解决办法是什么?
    微服务的图标是灰色的原因是idea没有识别到这些项目,没有自动创建Configuration文件。因此,我们需要手动为这些微服务创建配置文件,指定配置文件名、jdk版本、类路径、主类。 ......
  • 5.3 集成学习 - Boosting与AdaBoost
    1Boosting方法的基本思想在集成学习的“弱分类器集成”领域,除了降低方差来降低整体泛化误差的装袋法Bagging,还有专注于降低整体偏差来降低泛化误差的提升法Boosting。相比起操作简单、大道至简的Bagging算法,Boosting算法在操作和原理上的难度都更大,但由于专注于偏差降低,Boosting......