
一、#创作灵感#
Dubbo3在公司项目中运用越来越多,固写下此笔记以巩固知识要点。
Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1]Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
二、环境
- SpringBoot 3.3.5 官方地址:SpringBoot 3.3.5
- Nacos 2.4.3 官方下载地址:Nacos 2.4.3
- Dubbo 3.3.2 https://cn.dubbo.apache.org (普通网络可能访问受限)
- Open JDK17 下载地址:Open JDK17
- 本环境与作者另一篇文章的dubbo服务端对应(springboot2+nacos注册中心提供dubbo服务)
待完善
三、相关组件及协议对比分析
| dubbo | openfeign | |||
| 传输协议 | triple | dubbo | 任意协议扩展 官方生态库提供 JsonRPC、thrift 等支持 | http |
| 传输效率 | TCP协议,请求报文体积更小 | TCP协议,请求报文体积更小 | 使用HTTP2.0协议,也可以很好地减少报文体积,提高传输效率 | 如果时基于HTTP1.1的协议,请求中会包含很多无用的内容;如果是基于HTTP2.0,那么简单地封装一下还是可以作为一个RPC使用的,这时标准RPC框架更多是服务治理。 |
| 性能消耗 | 少 | 少 | 基于thrift可实现高效的二进制传输 | 大部分是通过json实现的,字节大小和序列化耗时都比thrift要更消耗性能 |
| 负载均衡 | 基本都自带了负载均衡策略 | 基本都自带了负载均衡策略 | 支持 | 支持 |
| 服务治理 | 能做到自动通知,不影响上游 | 能做到自动通知,不影响上游 | 支持 | 支持 |
四、POM文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.****.***</groupId>
<artifactId>alarm-webhook</artifactId>
<version>2.0.0</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Dubbo 3.3.2 3.2.16 3.1.11 2.7.23
阿里新平台已经将HSF换成了dubbo3 -->
<dubbo.version>3.3.2</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Triple协议支持 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-triple</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置 2.5.15 2.6.15 2.7.18
3.3.5 2.5.15 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
五、Dubbo客户端Java代码
import com.***.TimeUtils;
import com.***.TagsVO;
import com.***.SmsLinkageService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @Description: 短信组装
* @Author: brickerman
* @CreateDate: 2024/7/19 8:12 PM
* @Version: 1.0
*/
@Slf4j
@Service
public class SmsAssembleService2 {
/** saas**度告警联动异常信息 **/
@DubboReference
private SmsLinkageService smsLinkageService;
@Value(value="${spring.profiles.active}")
private String profile;
/**
* 全国saas**度异常指标追踪
*
* @param systemCode
* @param dateStr
* @return
* @throws Exception
*/
private String attachCTSaasHealthDetail( String systemCode, String dateStr) throws Exception {
String time = TimeUtils.calcWholeMinute();
return smsLinkageService.saasCtTopErrMsg2( systemCode, time );
}
}
六、客户端Dubbo配置
dubbo:
application:
name: smet-rpc-service # smet-rpc-service ops-portal_DUBBO_APP
register-mode: all # instance interface all (default)
# metadata-type: remote # local remote default
qos-enable: false
metadata-service-port: -1
#consumer服务发现模式
service-discovery:
# FORCE_INTERFACE,只消费接口级地址,如无地址则报错,单订阅 2.x 地址
# APPLICATION_FIRST,智能决策接口级/应用级地址,双订阅
# FORCE_APPLICATION,只消费应用级地址,如无地址则报错,单订阅 3.x 地址
migration: FORCE_APPLICATION
config-center:
address: none # 显式关闭配置中心
metadata-report:
# address: none
# report-metadata: false
timeout: 3000
address: nacos://10.13.**.55:8848
group: ${group} # L ${group}
username: nacos
password: nacos***
protocol:
name: tri
port: -1 # tri 50051 -1时从50052开始找 dubbo 20880 -1时从20881开始找
host: 10.13.**.55 # 显式指定服务暴露IP
# 注册中心地址
registry:
address: nacos://10.13.16.**:8848
protocol: nacos # zookeeper nacos redis multicast
group: ${group} # L ${group}
username: nacos
password: nacos****
parameters:
dubbo.ip: 10.13.**.55 # 注册中心使用的IP
register-consumer-url: true
namespace: smet-rpc-service
use-as-config-center: false # 明确声明不作为配置中心
use-as-metadata-center: false
consumer:
# 负载均衡策略
loadbalance: roundrobin # random roundrobin
check: false
timeout: 5000
nacos:
discovery:
server-addr: 10.13.**.55:8848
username: nacos
password: nacos****
namespace: smet-rpc-service
group: L
常见问题(FAQ)
Q1:只将nacos做为服务发现中心,报没有配metadata-report地址,且metadata-report.address配置none时无效,如果处理?
A:添加metadata-report配置
metadata-report:
# address: none
# report-metadata: false
timeout: 3000
address: nacos://10.13.**.55:8848
group: ${group} # L ${group}
username: nacos
password: nacos***
Q2:为什么nacos界面菜单:服务管理-》服务列表 中只能看到应用名而看不到服务提供者的类名?
A:显示应用名、还是类名、亦或都显示由这条dubbo配置决定
# instance interface all (default)
dubbo.registry.register-mode=all
配置instance效果图:

Q3:SpringBoot3.3.5与dubbo3客户端集成能调到springboot2.7.18做的服务端吗?
A:能,本文就是。而且作者还有一遍文章写的dubbo3服务端,是用的springboot2.7.18
Q4:客户端是SpringBoot3能从Nacos发现springboot2注册上的服务并调用到该服务吗?
A:能,可参考作者另一篇服务端的文章
2447



被折叠的 条评论
为什么被折叠?



