【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

这篇具有很好参考价值的文章主要介绍了【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求

在日益增长的业务需求中,一开始使用的是每个项目独立开发,虽然都是前后端分离的项目,但是每一个项目之间互不干扰。后来,因为某种需求,需要几个项目的数据相互交错获取。

最开始的想法就是集成多个数据源。

举例

有A、B、C三个项目,对应着数据库DBa、DBb、DBc、,现在A项目需要同时操作DBa、DBc数据库。

这时,最理想就是调用RPC框架了。

环境/版本

IDEA2022.3.2
java11
SpringBoot 2.7.12-SNAPSHOT
Nacos 2.2.2

注意:如果使用SpringBoot3.x以上的要使用jdk17以上的,否则会启动报错。

二、须知

2.1、什么是RPC?

RPC全称为Remote Procedure Call,翻译为远程过程调用。它是一种计算机网络通信协议,用于在不同的进程或计算机之间进行通信,让它们像调用本地方法一样调用远程方法。

假设你有一个应用程序,它需要调用另外一个计算机上的函数或方法,通常情况下,你需要通过网络编程,手动发送请求和接收响应。而RPC则可以让你像调用本地函数一样,直接调用远程函数,简化了网络编程的复杂度。

具体来说,RPC通信过程中,调用方会像调用本地方法一样,发送请求到远程服务器,请求中包含了要调用的方法名和参数列表。远程服务器接收到请求后,会解析请求,调用对应的方法,并将执行结果返回给调用方。调用方收到响应后,就可以像处理本地函数一样,对结果进行处理。

通俗来说,RPC就像是你在打电话时,向远程的对方说出你需要做的事情,对方完成后告诉你结果。这样,你就不需要亲自去完成任务了,这个过程中,你只需要关心需要完成的任务和结果,不需要关心具体的实现方式。

RPC在分布式系统中的应用非常广泛,比如微服务架构中的服务调用,Hadoop中的远程过程调用等。它可以让分布式系统更加简单、灵活和可扩展。

2.2、什么是Dubbo?

背景
Dubbo的诞生背景可以追溯到2011年,当时阿里巴巴内部的分布式架构和服务治理已经比较成熟,但面对日益增长的业务规模和复杂性,分布式服务之间的调用和管理成为了一个巨大的挑战。在这样的背景下,Dubbo应运而生。

Dubbo最初由阿里巴巴公司的工程师提出并开发,旨在为阿里巴巴内部的分布式系统提供一种高性能、可靠、可扩展的RPC框架,帮助阿里巴巴更好地构建分布式服务架构和实现服务治理。

后来,随着Dubbo逐渐成熟并在阿里巴巴内部广泛应用,阿里巴巴决定将其开源,于2011年底正式发布第一个版本,随后在2012年和2015年分别发布了2.0和2.5版本,以及2019年发布的2.7版本。Dubbo的开源以及不断更新迭代,吸引了越来越多的用户和开发者参与,逐渐成为了Java生态系统中最受欢迎的RPC框架之一。

如今,Dubbo已经广泛应用于阿里巴巴、华为、网易等企业的分布式系统中,并得到了国内外各大互联网公司和社区的广泛认可和支持。

2018年11月,Apache Dubbo 成为了 Apache 的顶级项目,这意味着 Dubbo 已经发展成为一个非常成熟、高质量、社区活跃的开源项目。Dubbo 的加入也进一步加强了 Apache 在分布式系统领域的地位,为分布式系统的发展和推广做出了巨大贡献。

作用

Dubbo主要包括三个核心模块:

Provider(服务提供者):暴露服务的应用,提供服务的方法。

Consumer(服务消费者):调用远程服务的应用,消费服务的方法。

Registry(服务注册中心):服务注册与发现的管理中心。

Dubbo框架的工作流程如下:

1、服务提供者启动,向注册中心注册自己提供的服务。

2、服务消费者启动,向注册中心订阅自己需要的服务。

3、注册中心返回可用的服务列表给服务消费者。

4、服务消费者调用远程服务。

5、远程服务提供者响应请求,返回结果给服务消费者。

6、服务消费者收到响应,完成调用。

2.3、什么是Nacos?

Nacos是一种基于云原生理念构建的动态服务发现、配置管理和服务治理平台,由阿里巴巴开源团队于2018年开源。它主要解决了分布式系统中服务注册、发现、配置管理和DNS服务等问题。

Nacos提供了以下核心功能:

1、服务注册和发现:Nacos可以帮助服务提供者自动注册服务并向Nacos Server汇报服务实例的健康状况,服务消费者可以通过Nacos查询可用服务实例。

2、配置管理:Nacos提供了集中式的配置管理功能,支持动态配置、版本管理、灰度发布、监听等功能,可以方便地管理分布式系统中的配置信息。

3、服务路由和负载均衡:Nacos支持服务提供者和消费者之间的流量管理和路由规则的动态更新,以及多种负载均衡策略。

4、DNS服务:Nacos支持提供DNS服务,可以在无需其他服务发现组件的情况下使用DNS方式进行服务发现。


温馨提示:Dubbo官网上默认的注册中心是Zookeeper,本文注册中心使用的是Nacos。

三、普通的SpringBoot项目集成微服务组件方案(笔者给出两种)

方案一(推荐)

像笔者这种的项目(看 需求),就是因为发展而演变成要使用微服务组件,而不是一开始就选好微服务架构的。就看这个部分就好了。否则请看方案二。

1、导入maven依赖(消费者和提供者都是一样的)

		<!--nacos-->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.0-beta.6</version>
        </dependency>

启动类加上注解@EnableDubbo
【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

2、配置application.yml文件(消费者)

server:
  port: 8102
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
dubbo:
  consumer:
    check: false
  application:
    name: dubbo-springboot-demo-consumer
  protocol:
    name: dubbo
    # 设置为-1表示自动配置可用端口
    port: -1
  registry:
    address: nacos://127.0.0.1:8848

配置application.yml文件(提供者)

server:
  port: 8105
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    address: nacos://127.0.0.1:8848
    

3、统一接口类(注意看包名,因为消费者和提供者的包名要一致)

package com.example.astar.component;

public interface DemoService {

    String sayHello(String name);
}

4、提供者的接口(接口上添加@DubboService注解)

package com.example.astar.service.Impl;

import com.example.astar.component.DemoService;// 注意包名
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class AstarServiceImpl implements DemoService {

    private static int flag = 0;

    @Override
    public String sayHello(String name) {
        String message = "你好啊! " + name + " =========》 " + flag++;
        return message;
    }
}

5、消费者调用接口

package com.example.astar.controller;

import com.example.astar.component.DemoService;//注意包名
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @DubboReference
    private DemoService demoService;

    @GetMapping("/1")
    public String hello() {

        String result = demoService.sayHello("Astar");
        String re = "Receive result ======> " + result;
        System.out.println(re);
        return re;
    }
}

6、调用成功

启动这两个项目(消费者和提供者),因为消费者配置了check: false,所以先启动哪一个项目都是可以的。消费者的端口是8102,我们访问一下

http://localhost:8102/user/1

看到如下
【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

温馨提示:

DemoService的全限定包名是import com.example.astar.component.DemoService,也就是说消费者和提供者之间的桥梁就是来自同一个接口,我们需要在项目中分别创建一模一样的接口才可以,实现类不用管。如果提供者和消费者的接口的包名不一样就会导致调用失败。

说人话:就是两个项目都不在一个文件下,怎么可能用同一个类?这里只要这个类本身、包名一样就可以了,Dubbo就会认为是一样的。

方案二

此方案是在一开始就决定用微服务这个框架的项目来说的,通常我们会分为类似以下几个子模块:

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

interface模块

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用
步骤我就懒得说了,大致和方案一一样,不同的地方是公共模块interface的导入:
在消费者和提供者上添加子模块即可:

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-samples-spring-boot-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

温馨提示:打包的时候会把子模块的引入部分一起打包,不用担心,正常使用即可,其余部分不变。

END


茫茫人海路漫漫,
潜心修炼方有颜。
踏实走好每一步,
静待花开见真章。
文章来源地址https://www.toymoban.com/news/detail-440756.html

祝您开发愉快!

到了这里,关于【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计项目:基于SpringBoot+Hadoop+Vue企业级网盘分布式系统的设计与实现

    2.1 运行环境 2.2 基本处理流程 企业网盘系统的使用者分为企业普通员工和企业管理员,所以进行的基本处理流程是不一样的。企业普通员工进入本系统前台主界面后看到的是首页数据大盘,系统右上角有用户的头像和系统公告通知。在首页顶部的位置有个欢迎用户功能,此模

    2024年02月05日
    浏览(70)
  • 企业级开发中协同开发与持续集成持续部署

    每个项目有唯一的代码仓库,所以不是每个开发者都需要创建一个代码仓库,一般都是项目负责人创建: 代码仓库有以下几种: github gitee gitlib 代码仓库的使用方法都差不多。 以gitee为例创建一个仓库: 如果没有账户的话,要注册一个新的用户名,注册用户之后,使用注册

    2024年02月14日
    浏览(57)
  • 谈谈企业级应用的自定义 UI 创建和集成方法一览

    笔者在掘金社区上已经发布了一些技术文章,记录了自己工作于企业级前端应用几年以来积累的一些项目经验和教训。 之前的文章关于企业级 Web 应用搜索引擎优化 Search Engine Optimization 的一些工作经验分享已经提到,所谓企业级前端应用,是指为大型企业或组织开发的前端应

    2024年02月03日
    浏览(48)
  • 云计算与大数据平台的企业级数据集成解决方案

    随着互联网的普及和人们对数据的需求不断增加,企业们需要更加高效、智能化地处理和分析大量的数据。云计算和大数据平台为企业提供了一种新的解决方案,可以帮助企业更高效地处理和分析大量数据。 云计算是一种基于互联网的计算资源共享和分配模式,可以让企业在

    2024年04月25日
    浏览(50)
  • vue2企业级项目(八)

    4、 searchForm 创建 components/searchForm/index.js 使用案例 5、 searchTable 创建 components/searchTable/index.js 创建 components/searchTable/index.vue 使用案例 6、 dialogForm 创建 components/dialogForm/index.js 创建 components/dialogForm/index.vue 使用案例

    2024年02月14日
    浏览(48)
  • vue2企业级项目(四)

    路由设计,过场动画设计 项目下载依赖 src 目录下创建 router/index.js 创建 router/modules 文件,并使用 require.context 技术进行动态引入。 创建 router/hook.js 文件,编写路由拦截等操作 使用 router.addRoutes 方法,动态设置后端传入的路由。(不建议) 前端开发需要路由来找具体的页面

    2024年02月15日
    浏览(50)
  • vue2企业级项目(三)

    引入mockjs,i18n 项目下载依赖 根目录创建 mock 文件夹,并创建 mock/index.js 创建 mock/mockPort.js 创建 mock/modules/test.js 示例 src 目录下创建 api/mock.js 示例 main.js 添加一下内容 根目录创建 vue.config.js 项目下载依赖 src 目录下创建 i18n/index.js 文件 main.js 引入使用 i18n ,和 vuex 生成的 s

    2024年02月14日
    浏览(42)
  • 低代码企业级PMO项目管理系统,360度全景透视企业管理视角

    在一个崇高的目标支持下,不停地工作,即使慢,也一定会获得成功。   爱因斯坦 企业级PMO项目管理业务是行业里相对成熟和规范的业务,拥有众多商业套件和标准产品。 然而随着企业数字化建设进入深水区,站在甲方角度进行项目管理的业务视角、精细化管控、标准化管

    2024年02月03日
    浏览(59)
  • 企业级微服务架构实战项目--xx优选-用户登录

    1.登录常量  2.登录地址  3.配置域名 4.启动程序     触发连接小程序后端的登录接口    小程序controller的登录方法  

    2024年02月11日
    浏览(62)
  • 企业级高负载web服务器-Tomcat小项目

    静态页面: 在网站设计中,纯粹HTML格式的网页(可以包含图片、视频JS (前端功能实现)、CSS (样式)等)通常 被称为\\\"静态网页\\\" 特点: 处理文件类型:如.html、jpg、.gif、.mp4、.swf、.avi、.wmv、.flv等2. 地址中不含有问号\\\"?\\\"或等特殊符号。 保存在网站服务器文件系统上的,是

    2024年02月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包