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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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)\]

在这里插入图片描述

在这里插入图片描述

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
141 1
|
13天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
140 13
Spring Cloud Alibaba:一站式微服务解决方案
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
Voice-Pro是一款开源的多功能音频处理工具,集成了语音转文字、文本转语音、实时翻译、YouTube视频下载和人声分离等多种功能。它支持超过100种语言,适用于教育、娱乐和商业等多个领域,为用户提供一站式的音频处理解决方案,极大地提高工作效率和音频处理的便捷性。
90 10
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
60 3
|
2月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
175 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
1月前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
108 9
|
2月前
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
|
7月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
下一篇
DataWorks