栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos(五):SpringCloud Alibaba 使用Nacos整合Dubbo

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nacos(五):SpringCloud Alibaba 使用Nacos整合Dubbo

Nacos整合Dubbo
  • 1. 前言
  • 2. Dubbo Spring Cloud 概述
    • 2.1官方描述以及特性对比
    • 2.2 主要特性
  • 3. Spring Cloud为什么需要RPC
  • 4. 创建项目
    • 4.1 创建公共api
      • 4.1.1创建接口
    • 4.2 创建 nacos-dubbo-provider
      • 4.2.1 pom.xml
      • 4.2.2 application.properties
      • 4.2.3 Application启动类
      • 4.2.4 Service
    • 4.3 创建 nacos-dubbo-consumer
      • 4.3.1 pom.xml
      • 4.3.2 application.properties
      • 4.3.3 Application启动类
      • 4.3.4 Controller
  • 5. 测试
  • 6. 总结&注意事项

1. 前言

前几章Nacos(二):Spring Cloud项目中Nacos作为注册中心 、 Nacos(三):Nacos集成OpenFegin 、Nacos(四):Nacos作为配置中心 描述了 Nacos作为注册中心的使用方式,本章使用Nacos 作为配置中心。

本章是在 之前 nacos-demo 的基础上 集成的
nacos-demo 码云地址:https://gitee.com/DianHaiShiYuDeMing/nacos-demo

2. Dubbo Spring Cloud 概述 2.1官方描述以及特性对比

Dubbo Spring Cloud 构建在原生的Spring Cloud 之上,其服务治理方面的能力可认为是Spring Cloud Plus,不仅完全覆盖Spring Cloud原生特性[5],而且提供更为稳定和成熟的实现, 特性比如如下:

功能组件Spring CoudDubbo Spring Cloud
分布式配置Git、Zookeeper、Consul、JDBCSpring Cloud 分布式配置 + Dubbo 配置中心[6]
服务注册与发现(Service registration and discovery)Eureka、Zookeeper、ConsulSpring Cloud 原生注册中心[7] + Dubbo 原生注册中心[8]
负载均衡(Load balancing)Ribbon(随机、轮询等算法)Dubbo 内建实现(随机、轮询等算法 + 权重等特性)
服务熔断(Circuit Breakers)Spring Cloud HystrixSpring Cloud Hystrix + Alibabasentinel[9] 等
服务调用(Service-to-service calls))Open Feign、RestTemplateSpring Cloud 服务调用 + Dubbo @Reference
链路跟踪(Tracing)Spring Cloud Sleuth[10] + Zipkin[11]Zipkin、opentracing 等
2.2 主要特性
  • 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,屏蔽了远程调用底层细节。
  • 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
  • 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
  • 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
  • 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
  • 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

Dubbo Spring Cloud 官方文档

3. Spring Cloud为什么需要RPC

在Spring Cloud构建的微服务系统中,大多数的开发者使用都是官方提供的Feign组件来进行内部服务通信,这种声明式的HTTP客户端使用起来非常的简洁、方便、优雅,但是有一点,在使用Feign消费服务的时候,相比较Dubbo这种RPC框架而言,性能堪忧。

虽说在微服务架构中,会讲按照业务划分的微服务独立部署,并且运行在各自的进程中。微服务之间的通信更加倾向于使用HTTP这种简答的通信机制,大多数情况都会使用REST API。这种通信方式非常的简洁高效,并且和开发平台、语言无关,但是通常情况下,HTTP并不会开启KeepAlive功能,即当前连接为短连接,短连接的缺点是每次请求都需要建立TCP连接,这使得其效率变的相当低下。

对外部提供REST API服务是一件非常好的事情,但是如果内部调用也是使用HTTP调用方式,就会显得显得性能低下,Spring Cloud默认使用的Feign组件进行内部服务调用就是使用的HTTP协议进行调用,这时,我们如果内部服务使用RPC调用,对外使用REST API,将会是一个非常不错的选择,恰巧,Dubbo Spring Cloud给了我们这种选择的实现方式。

4. 创建项目
  • 公共接口 nacos-dubbo-api
  • 服务发布者 nacos-dubbo-provider
  • 服务消费者 nacos-dubbo-provider
4.1 创建公共api

创建子模块 nacos-dubbo-api

4.1.1创建接口
package com.example.dubbo.api;

public interface HelloService {

    String syHello(String name);
}
4.2 创建 nacos-dubbo-provider 4.2.1 pom.xml


    
        nacos-demo
        com.example
        1.0.0
    
    4.0.0

    nacos-dubbo-provider

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
        

        
            com.example
            nacos-dubbo-api
            1.0.0
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

4.2.2 application.properties
server.port=8020
spring.application.name=nacos-dubbo-provider

##################nacos 配置###################################
## 名称空间
spring.cloud.nacos.discovery.namespace=evone
## nacos 链接账号   没有设置不可以不选
spring.cloud.nacos.username=evone
# nacos 链接 密码   没有设置不可以不选
spring.cloud.nacos.password=evone123456
# spring.cloud.nacos.server-addr=192.168.104.110:8848  使用的nacos改了端口号,   默认端口 8848
spring.cloud.nacos.server-addr=192.168.104.110:16848

##################dubbo 配置##################################
#指定 Dubbo 服务实现类的扫描基准包
#dubbo.scan.base-packages=com.example.dubbo
#Dubbo服务暴露的协议配置,其中子属性name为协议名称,port为协议端口(-1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
dubbo.protocol.name=dubbo
#Dubbo 服务注册中心配置,其中子属性address 的值 "spring-cloud://192.168.44.129",说明挂载到 Spring Cloud 注册中心
dubbo.registry.address=spring-cloud://192.168.104.110

#在 Spring Boot 2.1 以及更高的版本增加该设定,因为 Spring Boot 默认调整了 Bean 定义覆盖行为。
spring.main.allow-bean-definition-overriding=true
4.2.3 Application启动类
package com.example.dubbo;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient// 开启nacos 服务发现
@DubboComponentScan
public class NacosDubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosDubboProviderApplication.class, args);
    }
}
4.2.4 Service
package com.example.dubbo.service.impl;

import com.example.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class HelloServiceImpl implements HelloService {

    public String syHello(String name) {
        return "hello "+name;
    }
}
4.3 创建 nacos-dubbo-consumer 4.3.1 pom.xml


    
        nacos-demo
        com.example
        1.0.0
    
    4.0.0

    nacos-dubbo-consumer

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
        

        
            com.example
            nacos-dubbo-api
            1.0.0
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

4.3.2 application.properties
server.port=8021
spring.application.name=nacos-dubbo-consumer

##################nacos 配置###################################
## 名称空间
spring.cloud.nacos.discovery.namespace=evone
## nacos 链接账号   没有设置不可以不选
spring.cloud.nacos.username=evone
# nacos 链接 密码   没有设置不可以不选
spring.cloud.nacos.password=evone123456
# spring.cloud.nacos.server-addr=192.168.104.110:8848  使用的nacos改了端口号,   默认端口 8848
spring.cloud.nacos.server-addr=192.168.104.110:16848

##################dubbo 配置##################################
#指定 Dubbo 服务实现类的扫描基准包
#dubbo.scan.base-packages=com.example.dubbo
#Dubbo服务暴露的协议配置,其中子属性name为协议名称,port为协议端口(-1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
dubbo.protocol.name=dubbo
#Dubbo 服务注册中心配置,其中子属性address 的值 "spring-cloud://192.168.44.129",说明挂载到 Spring Cloud 注册中心
dubbo.registry.address=spring-cloud://192.168.104.110

#   dubbo.cloud.subscribed-services 默认 *
dubbo.cloud.subscribed-services=nacos-dubbo-provider

#在 Spring Boot 2.1 以及更高的版本增加该设定,因为 Spring Boot 默认调整了 Bean 定义覆盖行为。
spring.main.allow-bean-definition-overriding=true

4.3.3 Application启动类
package com.example.dubbo;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient// 开启nacos 服务发现
@DubboComponentScan
public class NacosDubboConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosDubboConsumerApplication.class, args);
    }
}
4.3.4 Controller
package com.example.dubbo.controller;

import com.example.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @DubboReference
    private HelloService helloService;

    @GetMapping("/syHello")
    public String syHello(String name){

        return helloService.syHello(name);
    }

}
5. 测试

请求http://127.0.0.1:8021/syHello

6. 总结&注意事项
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号