Dubbo 使用轻量的 Java SDK 开发 RPC Server 和 Client

server/2024/11/17 17:25:09/

本示例演示如何使用轻量 Dubbo SDK 开发 RPC Server 与 Client,示例使用 Java Interface 方式定义、发布和访问 RPC 服务,底层使用 Triple 协议通信。本示例完整代码请参见 dubbo-samples。

基于 Dubbo 定义的 Triple 协议,你可以轻松编写浏览器、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Java SDK 支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 API 来发布或调用这些服务。

Maven 依赖

在基于 Dubbo RPC 编码之前,您只需要在项目添加一个非常轻量的 dubbo依赖包即可,以 Maven 为例:

java"><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.3.0</version>
</dependency><!-- 为了避免 Netty 依赖冲突,您也可以是选择使用 dubbo-shaded 版本!-->
<!--
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-shaded</artifactId><version>3.3.0</version>
</dependency>
-->

定义服务

定义一个名为 DemoService的标准 Java 接口作为 Dubbo 服务(Dubbo 还支持基于 IDL 的服务定义模式)。

java">public interface DemoService {String sayHello(String name);
}

实现 DemoService 接口并编写业务逻辑代码。

java">public class DemoServiceImpl implements DemoService {@Overridepublic String sayHello(String name) {return "Hello " + name + ", response from provider.";}
}

注册服务并启动 Server

启动 server 并在指定端口监听 RPC 请求,在此之前,我们向 server 注册了以下信息:

  • 使用 Triple 作为通信 RPC 协议与并监听端口 50051
  • 注册 Dubbo 服务到 DemoService server
java">public class Application {public static void main(String[] args) {DubboBootstrap.getInstance().protocol(new ProtocolConfig(CommonConstants.TRIPLE, 50051)).service(ServiceBuilder.newBuilder().interfaceClass(DemoService.class).ref(new DemoServiceImpl()).build()).start().await();}
}

访问服务

最简单方式是使用 HTTP/1.1 POST 请求访问服务,参数则以标准 JSON 格式作为 HTTP 负载传递。如下是使用 cURL 命令的访问示例:

curl \--header "Content-Type: application/json" \--data '["Dubbo"]' \http://localhost:50051/org.apache.dubbo.demo.DemoService/sayHello

参数必须以数组格式进行传递,如果有多个参数,则格式类似 ["param1", {"param2-field": "param2-value"}, ...],具体请参见 triple 协议规范。

接下来,您也可以使用标准的 Dubbo client 请求服务,指定 server 地址即可发起 RPC 调用,其格式为 protocol://ip:host

public class Application {public static void main(String[] args) {DemoService demoService =ReferenceBuilder.newBuilder().interfaceClass(DemoService.class).url("tri://localhost:50051").build().get();String message = demoService.sayHello("dubbo");System.out.println(message);}
}


http://www.ppmy.cn/server/142697.html

相关文章

mindtorch study

安装 pip install mindtorch mindtorch 用于帮助迁移torch模型到mindspore 大部分都可以直接把mindtorch的torch搞成torch&#xff0c;就和以前的代码一致&#xff0c;注意下面 只有静态图有点点差异 step也有差异 自定义优化器就麻烦了。 pyttorch还是牛啊 并行计算还是用的…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

String类型

String类 在Java中&#xff0c;String 类是一个非常核心且常用的类&#xff0c;它用于表示文本值&#xff0c;即字符序列或者说字符串。 1.1 类的声明 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence 解释&#xff1a…

llamaindex实战-Agent-在Agent中和数据库对话(本地部署)

概述 本文实现了一个简单的智能Agent&#xff0c;该Agent先从数据库中查询出数据&#xff0c;然后再通过工具函数来对数据进行处理。这是一个非常常见的场景。从这个场景可以扩展到多个实际的场景。 同样&#xff0c;本文的实验都是在本地一台&#xff1a;16C32G的linux机器(…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库&#xff0c;提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用&#xff0c;文档详尽&#xff0c;社区活跃&#xff0c;支持多种图表类型&#xff08;如折线图、柱状图、饼图、散点…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域&#xff0c;智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快&#xff0c;智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

【C#】C#编程入门指南:构建你的.NET开发基础

文章目录 前言&#xff1a;1. C# 开发环境 VS的基本熟悉2. 解决方案与项目的关系3. 编辑、编译、链接、运行4. 托管代码和CLR4.1 CLR&#xff1a;4.2 C# 代码第编译过程&#xff08;两次编译的&#xff09; 5. 命名空间6. 类的组成与分析7. C# 的数据类型7.1 值类型7.2 引用类型…

循环神经网络(GRU)全面解析

1. 引言 什么是GRU&#xff1f; GRU&#xff08;Gated Recurrent Unit&#xff0c;门控循环单元&#xff09;是一种循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;变体&#xff0c;旨在处理序列数据。GRU在LSTM&#xff08;Long Short-Term Memory&…