Dubbo 开发入门

一、通过模板生成项目脚手架

Dubbo Initializer 可用来快速生成 Java 项目脚手架,帮助简化微服务项目搭建、基本配置、组件依赖管理等。

Initializer 仍在持续更新中,更多 Dubbo Feature 的支持将会陆续发布。

选择 Dubbo 版本

Initializer 将使用 dubbo-spring-boot-starter 创建 Spring Boot 项目,因此我们首先需要选择 Dubbo 与 Spring Boot 的版本。

initializer-choose-version

录入项目基本信息

接下来,填入项目基本信息,包括项目坐标、项目名称、包名、JDK 版本等。

initializer-project-info

选择项目结构

有两种项目结构可共选择,分别是 单模块 和 多模块,在这个示例中我们选择 单模块

initializer-project-architecture

  • 单模块,所有组件代码存放在一个 module 中,特点是结构简单。
  • 多模块,生成的项目有 APIService 两个模块,其中 API 用于存放 Dubbo 服务定义,Service 用于存放服务实现或调用逻辑。通常多模块更有利于服务定义的单独管理与发布。

选择依赖组件

我们为模板默认选择如下几个依赖组件:

  • Dubbo 组件
    • Java Interface
    • 注册中心,zookeeper
    • 协议 TCP
  • 常用微服务组件
    • Web
    • Mybatis
    • 模版引擎

initializer-dependencies

基于以上选项,生成的项目将以 Zookeeper 为注册中心,以高性能 Dubbo2 TCP 协议为 RPC 通信协议,并且增加了 Web、Mybatis 等组件依赖和示例。

注意:上面选中的 Dubbo 组件也都是默认选项,即在不手动添加任何依赖的情况下,打开页面后直接点击代码生成,生成的代码即包含以上 Dubbo 组件。

如手动添加依赖组件,请注意 Dubbo 各个依赖组件之间的隐含组合关系限制,比如

  • 如果选择了【Dubbo Service API】-【IDL】,则目前仅支持选择 【Dubbo Protocol】中的 【HTTP/2】或 【gRPC】 协议。
  • 同一个依赖分组下,相同类型的依赖只能选择一个,比如 【Dubbo Registry&Config&Metadata】分组下,从注册中心视角【Zookeeper】、【Nacos】只能选一个,如果要设置多注册中心,请在生成的代码中手动修改配置。但注册中心、配置中心可以分别选一个,比如 Zookeeper 和 Apollo 可同时选中。

生成项目模板

  • 点击 “浏览代码” 可在线浏览项目结构与代码
  • 点击 “获取代码” 生成项目下载地址

initializer-preview

项目下载到本地后,解压并导入 IDE 后即可根据需要开发定制 Dubbo 应用。

二、开发服务

发布和调用

通过一个简单的Springboot实例代码,展示Dubbo服务的发布和调用

本文将基于 Dubbo Samples 示例演示如何快速搭建并部署一个微服务应用。 代码地址:dubbo-samples-develop 代码分为三个模块

  • api
  • develop-provider
  • develop-consumer

准备

本示例代码基于Springboot 3.0

1、首先需要一个可用的注册中心 Zookeeper,Nacos,Redis 均可。

2、新建一个maven工程,添加如下依赖

        <!-- registry dependency --><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${nacos.version}</version></dependency><!-- dubbo dependency--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>

本示例使用的注册中心为Nacos,使用ZK请将nacos-client包替换为对应版本zk客户端包。

发布服务

1、定义服务接口

public interface DevelopService {String invoke(String param);
}

2、服务接口实现

@DubboService(group = "group1",version = "1.0")
public class DevelopProviderServiceV1 implements DevelopService{@Overridepublic String invoke(String param) {StringBuilder s = new StringBuilder();s.append("ServiceV1 param:").append(param);return s.toString();}
}

使用@DubboService 注解,Dubbo会将对应的服务注册到spring, 在spring启动后调用对应的服务导出方法,将服务注册到注册中心, 这样Consumer端才能发现我们发布的服务并调用

3、添加Dubbo配置

添加application.properties相关配置,也可新建dubbo.properties保存dubbo相关配置,内容如下:

dubbo.application.name=provider# Enable token verification for each invocation
dubbo.provider.token=false# Specify the registry address
# dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacosdubbo.protocol.name=dubbo
dubbo.protocol.port=20881

4、启动服务

创建Springboot启动类,需添加@EnableDubbo注解,开启Dubbo自动配置功能

@EnableDubbo
@SpringBootApplication
public class DevelopApplication {public static void main(String[] args) {SpringApplication.run(DevelopApplication.class, args);}
}

启动成功后,在注册中心可以看到对应的服务列表,如图: ![serviceList](/imgs/v3/develop/develop-service-list.png)

调用服务

创建DemoTask类,通过@DubboReference注解对需要调用的服务进行引入。即可像调用本地方法一样调用远程服务了。

//实现CommandLineRunner 让Springboot启动后调用run方法
@Component
public class DemoTask implements CommandLineRunner {@DubboReference(group = "group1",version = "1.0")private DevelopService developService;@Overridepublic void run(String... args) throws Exception {//调用DevelopService的group1分组实现System.out.println("Dubbo Remote Return ======> " + developService.invoke("1"));}
}

启动服务 打印

Dubbo Remote Return ======> ServiceV1 param:1

说明服务调用成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87417.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

exchange实战

未得到exchange服务器权限 确定exchange服务器ip地址 setspn -T example.domain.com -F -Q */* | findstr exchangeMailSniper 爆破用户名和密码 爆破Exchange邮箱用户名密码&#xff0c;为了防止账号被锁定&#xff0c;所以我们使用密码喷洒攻击&#xff0c;即只使用一个密…

5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT

导读&#xff1a;原文《5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。以下是部分内容&#xff0c; 喜…

【java基础——interface接口】

JAVA基础 interface接口 文章目录 JAVA基础接口 Interface 接口 Interface 接口是一种特殊的抽象类&#xff0c;它定义了一组抽象方法和常量&#xff0c;并且不包含具体实现。 只允许声明静态常量&#xff1a;必须且默认为 public static final 。声明抽象方法&#xff1a;必…

JavaScript—DOM(文档对象模型)

目录 DOM是什么&#xff1f; DOM有什么作用&#xff1f; 一、事件 理解事件 事件怎么写&#xff08;要做什么就写什么&#xff09;&#xff1f; 实战演练 1、页面加载完毕以后&#xff0c;打印一句话 2、如果有一个a标签&#xff0c;并给其添加一个点击事件 3、事件默…

SPI3+DMA外设驱动-TFTLCD初始化

前言 &#xff08;1&#xff09;本系列是基于STM32的项目笔记&#xff0c;内容涵盖了STM32各种外设的使用&#xff0c;由浅入深。 &#xff08;2&#xff09;小编使用的单片机是STM32F105RCT6&#xff0c;项目笔记基于小编的实际项目&#xff0c;但是博客中的内容适用于各种单片…

Jmeter(二十九):Jmeter常用场景梳理

一、每秒钟固定调用次数 如果想控制每秒发送请求数量,仅仅通过线程数与循环次数是不够的,因为这只能控制发送总数,而要控制每秒发送数量,需要线程数与常数吞吐量控制器的搭配使用,这种场景在性能测试中使用不多。 例如每秒钟调用30次接口,那么把线程数设置为30,将常数…

基于Java+SpringBoot+Vue前后端分离社区医院管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

SpringCluod深入教程

1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#…

SpringCloud入门——微服务调用的方式 RestTemplate的使用 使用nacos的服务名初步(Ribbon负载均衡)

目录 引出微服务之间的调用几种调用方法spring提供的组件 RestTemplate的使用导入依赖生产者模块单个配置的情况多个配置的情况没加.yaml的报错【报错】两个同名配置【细节】 完整代码config配置主启动类controller层 消费者模块进行配置restTemplate配置类controller层 使用na…

使用ffmpeg将WebM文件转换为MP4文件的简单应用程序

tiktok网上下载的short视频是webm格式的&#xff0c;有些程序无法处理该程序&#xff0c;比如roop程序&#xff0c;本文介绍了如何使用wxPython库创建一个简单的GUI应用程序&#xff0c;用于将WebM文件转换为MP4文件。这个应用程序使用Python编写&#xff0c;通过调用FFmpeg命令…

【Go 基础篇】探索Go语言中Map的神奇操作

嗨&#xff0c;Go语言的学习者们&#xff01;在编程世界中&#xff0c;Map是一个强大而又有趣的工具&#xff0c;它可以帮助我们高效地存储和操作键值对数据。Map就像是一本字典&#xff0c;可以让我们根据关键字&#xff08;键&#xff09;快速找到对应的信息&#xff08;值&a…

流媒体内容分发终极解决方案:当融合CDN与P2P视频交付结合

前言 随着互联网的发展&#xff0c;流媒体视频内容日趋增多&#xff0c;已经成为互联网信息的主要承载方式。相对传统的文字&#xff0c;图片等传统WEB应用&#xff0c;流媒体具有高数据量&#xff0c;高带宽、高访问量和高服务质量要求的特点&#xff0c;而现阶段互联网“尽力…