当前位置: 首页 > news >正文

spring注解方式整合Dubbo

系列文章目录


文章目录

  • 系列文章目录
  • 一、创建一个父工程项目
  • 二、创建子模块(dubbo-api模块)
  • 二、创建子模块(dubbo-provider模块)
  • 三、创建子模块(dubbo-consumer模块)
  • 总结


一、创建一个父工程项目

这里我们通过Spring Initializer 来帮我们构建一个spring-dubbo这个父项目,点击next

在这里插入图片描述

这里我们选择spring boot 的版本为2.3.12,这里我没有拉下来,所以我后面改成了2.3.2.RELEASE版本。

在这里插入图片描述

由于我们是通过spring-dubbo来做父项目,来帮我们做pom依赖管理,所以我们不需要这些无用目录

在这里插入图片描述

二、创建子模块(dubbo-api模块)

这里是和创建父模块一样的流程

在这里插入图片描述

这里也同样删除掉多余的文件目录,也删除掉springboot的启动类,因为这个模块主要是定义接口,实体,公共资源等,给dubbo服务调用双方依赖使用。

在这里插入图片描述

这里修改dubbo-apipom文件:

  1. 让其parent指向刚刚创建的父项目
    2.修改packaging方式为pom

在这里插入图片描述

这里修改spring-dubbopom文件:

  1. 改变了 packaging 方式为 pom
  2. 增加modules,注册了模块工程 dubbo-api

在这里插入图片描述

创建一个接口定义 -> DemoService

在这里插入图片描述

二、创建子模块(dubbo-provider模块)

这里和前面创建dubbo-api的流程一样,创建完后后删除多余的文件,然后修改dubbo-providerpom文件:

  1. 指定parent
  2. 设置打包类型为jar
  3. 导入spring web环境的依赖包,和dubbo自动装配的依赖包和接口定义的依赖包

在这里插入图片描述

pom中管理的模块增加dubbo-provider

在这里插入图片描述

dubbo-provider模块中创建DemoServiceImpl,实现了DemoService,并添加@Service注解,这个@Service注解是Dubbo提供的,标注了这个是一个Dubbo服务。

在这里插入图片描述

设置dubbo-provider的配置文件,设置如下配置:

  1. 指定应用名称
  2. 指定协议类型为dubbo
  3. 指定协议暴露端口,这里-1表示dubbo随机获取端口
  4. 设置注册中心的地址,这里我们用的是zk

在这里插入图片描述

然后在dubbo-provider的启动类上面加上@EnableDubbo注解,表示启用Dubbo服务。

在这里插入图片描述

三、创建子模块(dubbo-consumer模块)

创建流程和dubbo-provider一致,只是模块名称不一样,修改pom.xml也和provider一致,这里配置文件中除了应用名不一致,其他配置和provider一致。

在这里插入图片描述

这里我们新创建一个Task,然后通过 @Reference注解引入了DemoService,这里Task实现了CommandLineRunnerSpringBoot在项目启动后会遍历所有实现CommandLineRunner的实体类并执行run方法,在run方法中方法中我们会不断调用DemoService#sayHello方法,这里我们像调用本地方法一样调用。。

在这里插入图片描述

这里我们首先把Provider启动起来,

在这里插入图片描述

这里我们启动consumer的时候发现端口被占用了,因为我们没有指定端口,默认就是8080,刚刚provider启动就在8080,所以我们给consumer指定一个端口为8081,然后启动,这里在控制台我们可以发现远程调用成功。

在这里插入图片描述


总结

本节讲了Dubbo如何与spring集成,下一章我们会将spring整合dubbo的源码实现。

http://www.lryc.cn/news/13079.html

相关文章:

  • Git详解
  • 003__JAVA模板方法-设计模式
  • Springboot项目集成Netty组件
  • python 中的import cfg问题
  • [oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
  • vue3.0 生命周期
  • CGAL 数字类型
  • 如何将Python打包后的exe还原成.py?
  • CJSON简单介绍
  • 算法训练营 day49 动态规划 爬楼梯 (进阶)零钱兑换 完全平方数
  • Vue:extends继承组件复用性
  • ChatGPT 的一些思考
  • GEE学习笔记 六十九:【GEE之Python版教程三】Python基础编程一
  • 大数据全系安装
  • stable-diffusion-webui 安装使用
  • 3D点云处理:点云聚类--FEC: Fast Euclidean Clustering for Point Cloud Segmentation
  • 华为OD机试题 - 射击比赛(JavaScript)| 代码+思路+重要知识点
  • 流程引擎之Flowable简介
  • AcWing:4861. 构造数列、4862. 浇花(C++)
  • 进程的概念
  • 自动化测试5年经验,分享一些心得
  • independentsoft.de/MSG .NET Framework Crack
  • 基于Transformer的NLP处理管线
  • 二叉树OJ(一)二叉树的最大深度 二叉搜索树与双向链表 对称的二叉树
  • 使用Fairseq进行Bart预训练
  • n阶数字回转方阵 ← 模拟法
  • 【人工智能AI】二、NoSQL 基础知识《NoSQL 企业级基础入门与进阶实战》
  • Camera Rolling Shutter和Global Shutter的区别
  • 模版之AnyType
  • 【汇编】一、环境搭建(一只 Assember 的成长史)