SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

这篇具有很好参考价值的文章主要介绍了SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Dubbo介绍

Apache Dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力

二、Dubbo 与 SpringCloud 的通信 Openfeign的区别

1、协议支持方面

  • Feign更加优雅简单。Feign是通过REST API实现的远程调用,基于Http传输协议,服务提供者需要对外暴露Http接口供消费者调用,服务粒度是http接口级的。通过短连接的方式进行通信,不适合高并发的访问
  • Dubbo方式更灵活。Dubbo是通过RPC调用实现的远程调用,支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式,非常灵活。默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。Dubbo通过TCP长连接的方式进行通信,服务粒度是方法级的。

2、通信性能方面

  • Feign基于Http传输协议,底层实现是rest。在高并发场景下性能不够理想。
  • Dubbo框架的通信协议采用RPC协议,属于传输层协议,提升了交互的性能,保持了长连接,高性能。

三、Nacos介绍

Nacos致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

1、Nacos 与 Eureka 的选择

  • Eureka 是 springcloud最早的注册中心,目前已经进入停更维护
  • Nacos 除了服务的注册发现之外,还支持动态配置服务。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷

四、项目搭建

1、创建父工程

1)新建父工程项目gateway_nacos_dubbo_springcloud
2)在build.gradle中配置项目依赖版本控制
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.0'        //springboot依赖版本
    id 'io.spring.dependency-management' version '1.0.11.RELEASE' //spring的依赖管理插件版本
}

//版本控制
ext {
    set('springCloudVersion', "2021.0.3")                     //SpringCloud依赖版本
    set('springCloudAlibabaVersion', "2021.0.1.0")           //SpringCloudAlibaba依赖版本
    set('springBootVersion', "2.7.0")
}

//全部模块通用配置
allprojects{
    // 项目的默认名称和版本
    group ='com.threesides'
    version ='1.0.0-SNAPSHOT'
    // 指定JDK版本
    sourceCompatibility = '11'

    // 指定仓库地址
    repositories {
        // aliyun镜像
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/spring' }
        maven { url 'https://maven.aliyun.com/repository/grails-core' }
        maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
//        本地仓库
        mavenLocal()
        //   中央️仓库
        mavenCentral()
    }
}

// 子模块配置
subprojects {

    // 使用插件
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    //子模块通用依赖
    dependencies {
        testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
        testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${springBootVersion}"
    }

    //子模块依赖管理
    dependencyManagement {
        dependencies {
            dependency "org.springframework.boot:spring-boot-starter:${springBootVersion}"
        }
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
            mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
        }
    }
}

2、创建网关 gateway

1)新建子工程项目demo-gateway
2)在build.gradle中引入启动器以及依赖
group 'com.threesides'
version '1.0.0-SNAPSHOT'

jar.enabled = true
bootJar.enabled = true

dependencies {
    testImplementation 'org.springframework.boot:spring-boot-starter-test'  //测试环境
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'

    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery' //注册中心,这里使用的是alibaba-nacos,其他注册中心也可
    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-config'   //配置中心,这里使用的是alibaba-nacos

    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'  //网关 gateway 项目不能同时依赖spring-boot-starter-web
    implementation 'org.springframework.cloud:spring-cloud-loadbalancer'    // 负载均衡 SpringCloud 版本在 2021.0.x以上必须引依赖

    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

}

test {
    useJUnitPlatform()
}
3)启动类
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}
4)配置文件 bootstrap.yaml
server:
  port: 1101
spring:
  application:
    name: demo-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 

3、创建接口

1)新建子工程项目demo-interface
2)创建接口
public interface DemoInterface {
    public String demo(String message);
}

4、创建提供者

1)新建子工程项目demo-provider
2)在build.gradle中引入启动器以及依赖
group 'com.threesides'
version '1.0.0-SNAPSHOT'

archivesBaseName = "demo-provider"

jar.enabled = true
bootJar.enabled = true

dependencies {

    // 引入本地的  xxxx模块
    implementation project(':demo-interface')

    // 引入 spring-cloud 依赖
    // 注册中心,这里使用的是alibaba-nacos,其他注册中心也可。
    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery'

    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'

    //dubbo
    implementation 'org.apache.dubbo:dubbo-spring-boot-starter:3.0.8'
    implementation 'com.alibaba.nacos:nacos-client:2.1.0' // 由于我使用的客户端是2.1.0 
   //由于报错  java.lang.ClassNotFoundException: com.google.common.collect.Maps
	//引入guava
	implementation 'com.google.guava:guava:31.1-jre'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}
3)配置文件 application.yaml
server:
  port: 8010
#  dubbo的配置
dubbo:
  application:
    name: demo-provider
  registry:
    address: nacos://127.0.0.1:8848
4)启动类
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

5)提供者service 需要实现接口
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class DemoProviderImpl implements DemoInterface {
    @Override
    public String demo(String message) {
        System.out.println(message);
        return message+"成功了";
    }
}

5、创建消费者

1)新建子工程项目demo-consumer
2)在build.gradle中引入启动器以及依赖
group 'com.threesides'
version '1.0.0-SNAPSHOT'

archivesBaseName = "demo-consumer"

jar.enabled = true
bootJar.enabled = true

dependencies {

    // 引入本地的  xxxx模块
    implementation project(':demo-interface')

    // 引入 spring-cloud 依赖
    // 注册中心,这里使用的是alibaba-nacos,其他注册中心也可。
    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery'

    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'

    //dubbo
    implementation 'org.apache.dubbo:dubbo-spring-boot-starter:3.0.8'
    implementation 'com.alibaba.nacos:nacos-client:2.1.0' // 由于我使用的客户端是2.1.0 
   //由于报错  java.lang.ClassNotFoundException: com.google.common.collect.Maps
	//引入guava
	implementation 'com.google.guava:guava:31.1-jre'
	
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}
3)配置文件application.yaml
server:
  port: 8011
spring:
  application:
    name: demo-consumer
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848   # 注册中心  http://ip:端口号
dubbo:
  registry:
    address: nacos://127.0.0.1:8848
    register: false
4)启动类
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo
@SpringBootApplication
public class ComsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ComsumerApplication.class, args);
    }
}

5)controller层
@RestController
@RequestMapping("/demo")
public class DemoConsumerController {

    @Autowired
    private DemoConsumerService demoConsumerService;

    @GetMapping("/getProviderService")
    public String getProviderService() {
        return demoConsumerService.getProviderService();
    }

}
6)service层
import org.apache.dubbo.config.annotation.DubboReference;

@Service
public class DemoConsumerService {

    @DubboReference
    private DemoInterface demoInterface;

    public String getProviderService() {
        return demoInterface.demo("使用Dubbo调用");
    }

}
7)需要配置网关策略配置

这里引入Nacos的配置中心的使用

7.1 在demo-gateway项目中引入依赖

implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-config'

7.2 Nacos客户端添加配置

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)
SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true   #开启网关拉取nacos的服务
      routes:
        - id: demo-consumer
          uri: lb://demo-consumer
          predicates:
            - Path=/demo/**
7.3 在demo-gateway项目的bootstrap.yaml配置文件中添加
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        refresh-enabled: true # 是否动态刷新,默认为false
        # 支持多个共享dataId的配置,优先级小于extension-configs,shared-configs是一个集合
        shared-configs[0]:
          # 网关 通用配置可以定义在这个里面
          dataId: demo-gateway.yaml # 配置文件名dataId
          group: DEFAULT_GROUP  # 默认为DEFAULT_GROUP
         

6、发送请求测试

这里使用的Restful Fast Request插件测试
http://localhost:1101/demo/getProviderService
SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

五、项目结构

1、父子项目结构

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

2、网关demo-gateway结构

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

3、接口 demo-interface 结构

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

4、提供者结构

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

5、消费者demo-consumer结构

SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)文章来源地址https://www.toymoban.com/news/detail-461447.html

到了这里,关于SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 注册中心/配置管理 —— SpringCloud Alibaba Nacos

    Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生的应用程序 Nacos 的关键特性包括以下几项: 服务发现和服务健康监测:服务提供者使用原生 SDK、OpenAPI 等注册服务后,服务消费者可以使用 HTTPAPI 查找和发现服务。Nacos 提供对服务的实时健康检查

    2024年02月14日
    浏览(49)
  • Spring Cloud Gateway集成Nacos作为注册中心和配置中心

    本篇文章将介绍Spring Cloud Alibaba体系下Spring Cloud Gateway的搭建,服务注册中心和分布式配置中心使用Nacos,后续将会持续更新,介绍集成Sentinel,如何做日志链路追踪,如何做全链路灰度发布设计,以及Spring Cloud Gateway的扩展等。 ​ Spring Boot,Spring Cloud,Discovery,Config等基础依

    2024年02月11日
    浏览(50)
  • SpringCloud实用篇2——Nacos配置管理 Feign远程调用 Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月13日
    浏览(41)
  • springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析

    Spring Cloud 是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。 SpringCloud 将多个服务框架组合起来,通过Spring Boot进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署和易维护的分布式系统开

    2024年02月08日
    浏览(54)
  • SpringCloud微服务注册中心:Nacos介绍,微服务注册,Ribbon通信,Ribbon负载均衡,Nacos配置管理详细介绍

    注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。 服务注册中心(简称注册中心)是微服务框架的一个重要组件,在微服务架构里主要

    2024年02月22日
    浏览(54)
  • Dubbo 融合 Nacos 成为注册中心

    Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单,大致步骤可分为“增加 Maven 依赖”以及“配置注册中心“。 增加 Maven 依赖 只需要依赖Dubbo客户端即可,关于推荐的使用版本,请参考Dubbo官方文档或者咨询Dubbo开发人员: 配置注册中心 假设您 Dubbo 应用使用 Spring Framework 装

    2024年02月12日
    浏览(35)
  • SpringCloud | Dubbo 微服务实战——注册中心详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家 :https://www.captainbed.cn/z chatgpt体验地址 在项目开发过程中,随着项目不断扩大,也就是业务的不断增多,我们将采用集群,微服务的形式去降低配置,集群是指将一个项目部署到多个服

    2024年02月05日
    浏览(32)
  • 在项目中同时使用SpringCloud和Dubbo,注册中心选用Eureka?

    在pom.xml文件中添加Dubbo相关依赖:服务提供者和服务消费者都需要 1)配置服务提供者 1、在配置文件中配置Dubbo的相关信息: 2、在服务提供者的启动类上添加@EnableDubbo注解: 3、编写服务提供者的接口和实现类: 添加@Service,指定interfaceClass属性来指定要暴露的接口 2)配置

    2024年01月18日
    浏览(30)
  • springcloud使用nacos搭建注册中心

    nacos安装这里就不细说了,(Nacos下载以及搭建环境_你非柠檬为何心酸142的博客-CSDN博客) 大家也可以去网上安装好,这里主要讲搭建 ,我们需要手动启动nacos, 输入(.startup.cmd -m standalone),出现一下图标就代表ok  下面是我的pom.xml文件  首先是父工程所需要的依赖,需要注意的

    2024年02月08日
    浏览(44)
  • SpringCloud 注册中心(Nacos)快速入门

    作者:大三的土狗 专栏:SpringCloud   Nacos一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,目前来看还是大多数公司使用Nacos多于Eureka。   Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发

    2024年02月03日
    浏览(69)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包