dubbo
概述
简介
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题 官方提供了 Java、Golang、Rust 等多语言 SDK 实现
Dubbo的开源故事
最早在2008年,阿里巴巴就将Dubbo捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用 在2017年,Dubbo被正式捐献Apache软件基金会并成为Apache顶级项目,开始了一段新的征程
优势
活跃的社区
Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目, 贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家, 确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势。
庞大的用户群体
Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架, 庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。
任意通信协议
Dubbo 微服务间远程通信实现细节,支持 HTTP、HTTP/2、gRPC、TCP 等所有主流通信协议。 与普通 RPC 框架不同,Dubbo 不是某个单一 RPC 协议的实现, 它通过上层的 RPC 抽象可以将任意 RPC 协议接入 Dubbo 的开发、治理体系。
多语言 SDK
Dubbo 提供几乎所有主流语言的 SDK 实现,定义了一套统一的微服务开发范式。 Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯
功能
微服务编程范式和工具
Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)
高性能的 RPC 通信
Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现, 并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。
微服务监控与治理
Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。 除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。
部署在多种环境
Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下
搭建
公共接口模块
支付接口
package jkw.service;
/**
* 支付接口
*/
public interface PaymentService {
/**
* 根据订单id支付【模拟】
* @param id
* @return
*/
String payment(Integer id);
}
服务提供者
依赖
<?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">
<parent>
<artifactId>java_sc_alibaba</artifactId>
<groupId>jkw.life</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>test-dubbo-provider8004</artifactId>
<dependencies>
<!-- dubbo的注册中心nacos-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
<!-- dubbo和springboot整合依赖包-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- SpringMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 公共接口模块-->
<dependency>
<artifactId>test-com-interface</artifactId>
<groupId>jkw.life</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 8004
dubbo:
application:
name: test-dubbo-provider8004
protocol:
# 通讯协议
name: dubbo
# 端口号 设置端口为 -1 表示 dubbo 自动扫描并使用可用端口(从20880开始递增),避免了端口冲突的问题。
port: -1
registry:
# 注册地址
address: nacos://192.168.66.103:8848
启动类
package jkw;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@EnableDubbo
@SpringBootApplication
public class Main8004 {
public static void main(String[] args) {
SpringApplication.run(Main8004.class, args);
log.info("**************dubbo 服务提供者 8004 启动成功 ************");
}
}
支付接口实现类
package jkw.service;
import org.apache.dubbo.config.annotation.DubboService;
/**
* 支付接口实现类
*/
@DubboService
public class PaymentServiceImpl implements PaymentService {
@Override
public String payment(Integer id) {
return " payment success ";
}
}
服务消费者
依赖
<?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">
<parent>
<artifactId>java_sc_alibaba</artifactId>
<groupId>jkw.life</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>test-dubbo-customer8005</artifactId>
<dependencies>
<!-- dubbo的注册中心nacos-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
<!-- dubbo和springboot整合依赖包-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- SpringMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 公共接口模块-->
<dependency>
<artifactId>test-com-interface</artifactId>
<groupId>jkw.life</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 8005
dubbo:
application:
name: test-dubbo-customer8005
protocol:
# 通讯协议
name: dubbo
# 端口号 设置端口为 -1 表示 dubbo 自动扫描并使用可用端口(从20880开始递增),避免了端口冲突的问题。
port: -1
registry:
# 注册地址
address: nacos://192.168.66.103:8848
启动类
package jkw;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@EnableDubbo
@SpringBootApplication
public class Main8005 {
public static void main(String[] args) {
SpringApplication.run(Main8005.class, args);
log.info("**************dubbo 服务提供者 8004 启动成功 ************");
}
}
订单控制层
package jkw.controller;
import jkw.service.PaymentService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 订单控制层
*/
@RestController
public class OrderController {
@DubboReference
PaymentService paymentService;
@GetMapping("/payment")
public String payment() {
return paymentService.payment(1);
}
}
测试
测试:http://localhost:8005/payment