SpringCloud Alibaba集成Dubbo实现远程服务间调用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SpringCloud Alibaba集成Dubbo实现远程服务间调用

SpringCloud Alibaba集成Dubbo实现远程服务间调用

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2X4hYOm7-1676772812773)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212440924.png)\]

工程创建

一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等

项目基本结构图如下所示:

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVJdb83Z-1676772812774)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212812556.png)\]

二、依赖引入

在以上两个子模块的pom.xml文件中分别引入如下依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <!--模板引擎依赖,即使不需要生成模板,也需要引入-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--Spring Cloud Alibaba-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <!--Dubbo-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!--对api的依赖-->
        <dependency>
            <groupId>com.springcloud.xxkfz</groupId>
            <artifactId>dubbo-base</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

服务生产者

一、在编写生产者服务代码之前,我们首先在dubbo-base定义一个RPC接口queryList供消费者调用。那么这个接口在哪里去实现呢?

package com.simplememory.xxkfz.service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
public interface IProviderService {
   
   

    List<String> queryList();
}

二、在product-dubbo-provider模块中创建实现类ProviderServiceImpl.java实现dubbo-base声明的queryList接口。其中@Service是Dubbo提供的注解,表示当前服务会发布成一个远程服务,不要和Spring提供的搞混哦。

package com.simplememory.xxkfz.service;

import org.apache.dubbo.config.annotation.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ProviderServiceImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:44:00
 */
@Service
public class ProviderServiceImpl implements IProviderService {
   
   


    @Override
    public List<String> queryList() {
   
   
        return Arrays.asList("欢迎关注小小开发者公众号","私信回复【源代码】可获取代码工程资源哦");
    }
}

三、在配置文件application.yml中配置数据源信息、dubbo相关配置等;完整配置信息如下:

# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8
    username: root
    password: root
  application:
    name: provider-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8050
# dubbo相关配置
dubbo:
  scan:
    # dubbo服务实现类的扫描基准包路径
    base-packages: com.simplememory.xxkfz.service
    #Dubbo服务暴露的协议配置
  protocol:
    name: dubbo
    port: 1

服务消费者

编写基本的相关代码结构

一、创建ConsumerController.java,提供查询列表数据的接口。

package com.simplememory.xxkfz.controller;

import com.simplememory.xxkfz.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
@RestController
@RequestMapping("/dubbo/consumer")
public class ConsumerController {
   
   

    @Autowired
    private ConsumerService consumerService;

    @GetMapping
    public List<String> list() {
   
   
        return consumerService.list();
    }
}

二、创建ConsumerService.java

package com.simplememory.xxkfz.service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerService.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
public interface ConsumerService {
   
   


    List<String> list();

}

三、创建实现类ConsumerServiceImpl.java,并使用使用@Reference注解注入相应的service,就可以像调用本地jar包一样,调用远程服务。

package com.simplememory.xxkfz.service.impl;

import com.simplememory.xxkfz.service.ConsumerService;
import com.simplememory.xxkfz.service.IProviderService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
@Service
public class ConsumerServiceImpl implements ConsumerService {
   
   

    @Reference
    private IProviderService providerService;

    @Override
    public List<String> list() {
   
   
        return providerService.queryList();
    }
}

四、在配置文件application.yml中配置基本信息,主要配置了要订阅的服务名;完整配置信息如下:

# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8
    username: root
    password: root
  application:
    name: consumer-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8020
#dubbo配置
#要订阅的服务名,多个用,隔开
dubbo:
  cloud:
    subscribed-services: provider-service

测试

  • 启动nacos注册中心。

  • nacos注册中心启动完成后,依次启动DubboProviderMainApplication,DubboConsumerMainApplication生产者、消费者服务,可以看到Nacos服务列表里有两个服务。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyFB7F3G-1676772812775)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218215513847.png)\]

在这里插入图片描述

在这里插入图片描述

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
存储 安全 开发者
【Docker 专栏】Docker 与云存储服务的集成
【5月更文挑战第9天】在数字化时代,Docker和云存储服务的结合为企业和开发者提供了强大工具。Docker的高效性、可移植性和隔离性,加上云存储的扩展性、高可靠性和高可用性,通过集成可以实现数据持久化、便捷部署和资源优化。常见的集成包括AWS S3、Azure Blob Storage和Google Cloud Storage。集成时需注意安全、性能和兼容性问题,未来集成将更加紧密和智能化,助力企业创造更大价值。
【Docker 专栏】Docker 与云存储服务的集成
|
12天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
22 2
|
12天前
|
负载均衡 Dubbo Java
SpringCloud和Dubbo有哪些区别
SpringCloud和Dubbo有哪些区别
|
12天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
33 0
|
12天前
|
存储 前端开发 Java
第十一章 Spring Cloud Alibaba nacos配置中心
第十一章 Spring Cloud Alibaba nacos配置中心
30 0
|
12天前
|
消息中间件 SpringCloudAlibaba Java
第十章 SpringCloud Alibaba 之 Nacos discovery
第十章 SpringCloud Alibaba 之 Nacos discovery
11 1
|
12天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
12天前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
12天前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。
|
1天前
|
Dubbo Cloud Native 应用服务中间件
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
13 2