Dubbo 与 Spring Cloud 完美结合

而且Dubbo Spring Cloud 基于 Dubbo Spring Boot 2.7.1 和 Spring Cloud 2.x 开发,无论开发人员是 Dubbo 用户还是 Spring Cloud 用户, 都能轻松地驾驭,并以接近“零”成本的代价使应用向上迁移。Dubbo Spring Cloud 致力于简化云原生开发成本,以达成提高研发效能以及提升应用性能等目的。

Dubbo Spring Cloud 主要特性


面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,屏蔽了远程调用底层细节。

智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。

服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。

高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。

运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。

可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

Spring Cloud 为什么需要RPC


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

必看视频!获取2024年最新Java开发全套学习资料 备注Java

架而言,性能堪忧。

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

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

实战

=================================================================

本小结将会以一个简单的入门案例,介绍一下在使用Nacos作为服务中心,使用Dubbo来实现服务提供方和服务消费方的案例。

Nacos的安装、部署配置和使用已经在前面的章节介绍过了,这里不再赘述,如果还有不清楚的读者,请参考前面的Nacos系列文章:

《Spring Cloud Alibaba | Nacos服务中心初探》

《Spring Cloud Alibaba | Nacos服务注册与发现》

《Spring Cloud Alibaba | Nacos集群部署》

《Spring Cloud Alibaba | Nacos配置管理》

创建父工程 dubbo-spring-cloud-demo


父工程依赖pom.xml如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/pom.xml

org.springframework.cloud

spring-cloud-dependencies

${spring-cloud.version}

pom

import

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring-cloud-alibaba.version}

pom

import

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud

spring-cloud-starter-dubbo

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

注意:

  • 必须包含**spring-boot-starter-actuator**包,不然启动会报错。

  • **spring-cloud-starter-dubbo**包需要注意groupId,根据具体使用的spring cloud alibaba版本依赖来确定。

  • 如果使用孵化版本,使用的groupId为:org.springframework.cloud

  • 如果使用毕业版本,使用的groupId为:com.alibaba.cloud

  • 以上引用未指定版本,需显示的声明**<dependencyManagement>**

创建子工程 dubbo_api


API模块,存放Dubbo服务接口和模型定义,非必要,这里创建仅为更好的代码重用以及接口、模型规格控制管理。

定义抽象接口HelloService.java:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_api/src/main/java/com/springcloud/dubbo_api/service/HelloService.java

public interface HelloService {

String hello(String name);

}

创建子工程 dubbo_provider ,Dubbo服务提供方


工程依赖pom.xml如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/pom.xml

com.springcloud.book

ch13_1_dubbo_api

${project.version}

此处引入公共API模块。

实现Dubbo接口,HelloServiceI.java如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/src/main/java/com/springcloud/dubbo_provider/service/HelloServiceI.java

@Service

public class HelloServiceI implements HelloService {

@Override

public String hello(String name) {

return "Hello " + name;

}

}

注意:这里的**@Service注解并不是来自Spring的org.springframework.stereotype.Service,而是Dubbo的org.apache.dubbo.config.annotation.Service,千万不要引用错误。这里的@Service**注解仅声明该Java服务(本地)实现为Dubbo服务。

配置文件 application.yml 需要将Java服务(本地)配置为 Dubbo 服务(远程)如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/src/main/resources/application.yml

server:

port: 8000

dubbo:

scan:

base-packages: com.springcloud.book.ch13_1_dubbo_provider.service

protocol:

name: dubbo

port: -1

registry:

address: spring-cloud://192.168.44.129

spring:

application:

name: dubbo-spring-cloud-provider

cloud:

nacos:

discovery:

server-addr: 192.168.44.129:8848

main:

allow-bean-definition-overriding: true

注意:在暴露Dubbo服务方面,推荐使用外部化配置的方式,即指定Java服务实现类的扫描基准包。

Dubbo Spring Cloud 继承了 Dubbo Spring Boot 的外部化配置特性,也可以通过标注 @DubboComponentScan 来实现基准包扫描。

  • dubbo.scan.base-packages:指定 Dubbo 服务实现类的扫描基准包

  • dubbo.protocol:Dubbo服务暴露的协议配置,其中子属性name为协议名称,port为协议端口(-1 表示自增端口,从 20880 开始)

  • dubbo.registry:Dubbo 服务注册中心配置,其中子属性address 的值 “spring-cloud://192.168.44.129”,说明挂载到 Spring Cloud 注册中心

  • spring.application.name:Spring 应用名称,用于 Spring Cloud 服务注册和发现。该值在 Dubbo Spring Cloud 加持下被视作**dubbo.application.name,因此,无需再显示地配置dubbo.application.name**。

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

  • spring.cloud.nacos.discovery:Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口。

创建应用主类Ch131DubboProviderApplication.java:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/src/main/java/com/springcloud/dubbo_provider/DubboProviderApplication.java

@SpringBootApplication

@EnableDiscoveryClient

public class DubboProviderApplication {

public static void main(String[] args) {

SpringApplication.run(DubboProviderApplication.class, args);

}

}

创建子工程 dubbo_consumer ,服务调用方:


工程依赖pom.xml如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/pom.xml

com.springcloud.book

ch13_1_dubbo_api

${project.version}

工程配置application.yml如下:

代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/src/main/resources/application.yml

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

image.png

  • RabbitMQ实战指南

image.png

  • 手写RocketMQ笔记

image.png

  • 手写“Kafka笔记”

image

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
c/main/resources/application.yml

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

[外链图片转存中…(img-Yqbn00kk-1716469099834)]

  • RabbitMQ实战指南

[外链图片转存中…(img-OWwOfiAC-1716469099835)]

  • 手写RocketMQ笔记

[外链图片转存中…(img-h8AsrU9E-1716469099835)]

  • 手写“Kafka笔记”

[外链图片转存中…(img-aEzXfpRA-1716469099836)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值