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 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 与 Eureka 的选择

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

搭建

一、创建父工程

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 {
// 使用插件applyplugin: 'java'applyplugin: 'org.springframework.boot'applyplugin: '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}"        }
    }
}

二、创建网关 gateway

1、新建子工程项目demo-gateway

2、在build.gradle中引入启动器以及依赖

group'com.threesides'version'1.0.0-SNAPSHOT'jar.enabled=truebootJar.enabled=truedependencies {
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'implementationgroup: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery'//注册中心,这里使用的是alibaba-nacos,其他注册中心也可implementationgroup: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-config'//配置中心,这里使用的是alibaba-nacosimplementation'org.springframework.cloud:spring-cloud-starter-gateway'//网关 gateway 项目不能同时依赖spring-boot-starter-webimplementation'org.springframework.cloud:spring-cloud-loadbalancer'// 负载均衡 SpringCloud 版本在 2021.0.x以上必须引依赖implementation'org.springframework.cloud:spring-cloud-starter-bootstrap'}
test {
useJUnitPlatform()
}

3、启动类

@SpringBootApplication@EnableDiscoveryClientpublicclassGatewayApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
    }
}

4、配置文件 bootstrap.yaml

server:  port: 1101spring:  application:    name: demo-gateway
  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848 

三、创建接口

1、新建子工程项目demo-interface

2、创建接口

publicinterfaceDemoInterface {
publicStringdemo(Stringmessage);
}

四、创建提供者

1、新建子工程项目demo-provider

2、在build.gradle中引入启动器以及依赖

group'com.threesides'version'1.0.0-SNAPSHOT'archivesBaseName="demo-provider"jar.enabled=truebootJar.enabled=truedependencies {
// 引入本地的  xxxx模块implementationproject(':demo-interface')
// 引入 spring-cloud 依赖// 注册中心,这里使用的是alibaba-nacos,其他注册中心也可。implementationgroup: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery'implementationgroup: 'org.springframework.boot', name: 'spring-boot-starter-web'//dubboimplementation'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//引入guavaimplementation'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、启动类

importorg.apache.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo@SpringBootApplicationpublicclassProviderApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
    }
}

5、提供者service 需要实现接口

importorg.apache.dubbo.config.annotation.DubboService;
@DubboServicepublicclassDemoProviderImplimplementsDemoInterface {
@OverridepublicStringdemo(Stringmessage) {
System.out.println(message);
returnmessage+"成功了";
    }
}

五、创建消费者

1、新建子工程项目demo-consumer

2、在build.gradle中引入启动器以及依赖

group'com.threesides'version'1.0.0-SNAPSHOT'archivesBaseName="demo-consumer"jar.enabled=truebootJar.enabled=truedependencies {
// 引入本地的  xxxx模块implementationproject(':demo-interface')
// 引入 spring-cloud 依赖// 注册中心,这里使用的是alibaba-nacos,其他注册中心也可。implementationgroup: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery'implementationgroup: 'org.springframework.boot', name: 'spring-boot-starter-web'//dubboimplementation'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//引入guavaimplementation'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: 8011spring:  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、启动类

importorg.apache.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo@SpringBootApplicationpublicclassComsumerApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(ComsumerApplication.class, args);
    }
}

5、controller层

@RestController@RequestMapping("/demo")
publicclassDemoConsumerController {
@AutowiredprivateDemoConsumerServicedemoConsumerService;
@GetMapping("/getProviderService")
publicStringgetProviderService() {
returndemoConsumerService.getProviderService();
    }
}

6、service层

importorg.apache.dubbo.config.annotation.DubboReference;
@ServicepublicclassDemoConsumerService {
@DubboReferenceprivateDemoInterfacedemoInterface;
publicStringgetProviderService() {
returndemoInterface.demo("使用Dubbo调用");
    }
}

7 、还有最后一步 需要配置网关策略配置

这里引入Nacos的配置中心的使用
  • 在demo-gateway项目中引入依赖
    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-config'
  • Nacos客户端添加配置

Nacos配置.png
yaml.png

spring:  cloud:    gateway:      discovery:        locator:          enabled: true   #开启网关拉取nacos的服务      routes:        - id: demo-consumer
          uri: lb://demo-consumer
          predicates:            - Path=/demo/**
  • 在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

发送请求测试

请求测试.png

目录
相关文章
|
15天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
45 5
|
1月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
150 13
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
37 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
53 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
49 3
|
7月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
74 2
|
4月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
90 0
|
1月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
43 2