• 【SpringBoot】| SpringBoot集成Dubbo


    目录

    一:SpringBoot集成Dubbo

    1. 创建公共项目

    2. 创建提供者项目provider

    3. 创建消费者consumer项目

    4. 注册中心Zookeeper的安装

    图书推荐:《Python 自动化办公应用大全》


    一:SpringBoot集成Dubbo

    阿里巴巴提供了 dubbo 集成 springBoot 开源项目, 可以到 GitHub 上 GitHub - apache/dubbo-spring-boot-project: Spring Boot Project for Apache Dubbo查看入门教程

    Apache Dubbo Spring Boot 项目可以轻松使用 Dubbo 作为 RPC 框架创建Spring Boot应用程序。更重要的是,它还提供: 

    Apache Dubbo是一个高性能、轻量级、基于java的RPC框架。 Dubbo 提供了三个关键功能,包括基于接口的远程调用、容错和负载均衡以及自动服务注册和发现。

    发布版本

    dubbo-spring-boot-starter您可以通过将以下依赖项添加到 pom.xml 来将最新内容引入您的项目。

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.apache.dubbogroupId>
    4. <artifactId>dubbo-spring-boot-starterartifactId>
    5. <version>2.7.8version>
    6. dependency>
    7. dependencies>

    1. 创建公共项目

    按照 Dubbo 官方开发建议,创建一个接口项目,该项目只定义接口和 model 类。此项目就是一个普通的 maven 项目

    pom.xml

    1. "1.0" encoding="UTF-8"?>
    2. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. 4.0.0
    5. com.zl
    6. dubbo-maven-1
    7. 1.0-SNAPSHOT

    model类

    1. package com.zl.model;
    2. import java.io.Serializable;
    3. public class Student implements Serializable {
    4. private static final long serialVersionUID = 7924975682459971235L;
    5. private Integer id;
    6. private String name;
    7. private Integer age;
    8. @Override
    9. public String toString() {
    10. return "Student{" +
    11. "id=" + id +
    12. ", name='" + name + '\'' +
    13. ", age=" + age +
    14. '}';
    15. }
    16. public Integer getId() {
    17. return id;
    18. }
    19. public void setId(Integer id) {
    20. this.id = id;
    21. }
    22. public String getName() {
    23. return name;
    24. }
    25. public void setName(String name) {
    26. this.name = name;
    27. }
    28. public Integer getAge() {
    29. return age;
    30. }
    31. public void setAge(Integer age) {
    32. this.age = age;
    33. }
    34. }

    服务接口

    1. package com.zl.service;
    2. import com.zl.model.Student;
    3. public interface StudentService {
    4. Student queryStudent(Integer id);
    5. }

    2. 创建提供者项目provider

    是一个SpringBoot项目,所以需要新建一个新工程!

    第一步:创建SpringBoot项目,引入核心依赖

    pom.xml

    核心依赖:公共项目的gav、dubbo依赖、zookeeper依赖。

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.7.15version>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.zlgroupId>
    12. <artifactId>dubbo-providerartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>dubbo-providername>
    15. <description>dubbo-providerdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>com.zlgroupId>
    22. <artifactId>dubbo-maven-1artifactId>
    23. <version>1.0-SNAPSHOTversion>
    24. dependency>
    25. <dependency>
    26. <groupId>org.apache.dubbogroupId>
    27. <artifactId>dubbo-spring-boot-starterartifactId>
    28. <version>2.7.8version>
    29. dependency>
    30. <dependency>
    31. <groupId>org.apache.dubbogroupId>
    32. <artifactId>dubbo-dependencies-zookeeperartifactId>
    33. <version>2.7.8version>
    34. <type>pomtype>
    35. <exclusions>
    36. <exclusion>
    37. <artifactId>slf4j-log4j12artifactId>
    38. <groupId>org.slf4jgroupId>
    39. exclusion>
    40. exclusions>
    41. dependency>
    42. <dependency>
    43. <groupId>org.springframework.bootgroupId>
    44. <artifactId>spring-boot-starterartifactId>
    45. dependency>
    46. <dependency>
    47. <groupId>org.springframework.bootgroupId>
    48. <artifactId>spring-boot-starter-testartifactId>
    49. <scope>testscope>
    50. dependency>
    51. dependencies>
    52. <build>
    53. <plugins>
    54. <plugin>
    55. <groupId>org.springframework.bootgroupId>
    56. <artifactId>spring-boot-maven-pluginartifactId>
    57. plugin>
    58. plugins>
    59. build>
    60. project>

    第二步:实现Service公共项目的接口,暴露服务

    注:使用@DubboService注解去暴露服务;使用interfaceClass属性指定接口的类,version属性指定版本号,还可以使用timeout指定延迟时间。

    1. package com.zl.service.impl;
    2. import com.zl.model.Student;
    3. import com.zl.service.StudentService;
    4. import org.apache.dubbo.config.annotation.DubboService;
    5. // 暴露服务
    6. @DubboService(interfaceClass = StudentService.class,version = "1.0"
    7. ,timeout = 5000)
    8. public class StudentServiceImpl implements StudentService {
    9. @Override
    10. public Student queryStudent(Integer id) {
    11. Student student = new Student();
    12. if (1001 == id){
    13. student.setId(1001);
    14. student.setName("Jack");
    15. student.setAge(18);
    16. }else if(1002 == id){
    17. student.setId(1002);
    18. student.setName("Rose");
    19. student.setAge(22);
    20. }
    21. return student;
    22. }
    23. }

    第三步:application.properties进行dubbo属性配置

    1. #配置服务器名称
    2. spring.application.name=studentService-provider
    3. #配置扫描的包
    4. dubbo.scan.base-packages=com.zl.service
    5. #配置dubbo协议
    6. #dubbo.protocol.name=dubbo
    7. #dubbo.protocol.port=20881
    8. #注册中心
    9. dubbo.registry.address=zookeeper://localhost:2181

    第四步:启动类

    注:适应@EnableDubbo注解启动dubbo,这是一个复合注解,有@EnableDubboConfig和

    @DubboComponentScan的功能。

    1. package com.zl;
    2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. @SpringBootApplication
    6. @EnableDubbo // 启动Dubbo
    7. public class DubboProviderApplication {
    8. public static void main(String[] args) {
    9. SpringApplication.run(DubboProviderApplication.class, args);
    10. }
    11. }

    3. 创建消费者consumer项目

    第一步:创建SpringBoot项目,引入核心依赖,和提供者相同;增加一个web依赖,方便测试

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>

    第二步:controller调用远程服务

    注:使用@DubboReference注解调用远程服务,并把创建好的代理对象,注入给studentService。

    1. package com.zl.controller;
    2. import com.zl.model.Student;
    3. import com.zl.service.StudentService;
    4. import org.apache.dubbo.config.annotation.DubboReference;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. @RestController
    8. public class DubboController {
    9. // 这里的interfaceClass属性省略也行
    10. @DubboReference(interfaceClass = StudentService.class,version = "1.0")
    11. private StudentService studentService;
    12. @GetMapping("/query")
    13. public String queryStudent(){
    14. Student student = studentService.queryStudent(1001);
    15. return "调用远程接口,获取对象:"+student;
    16. }
    17. }

    第三步:application.properties进行dubbo属性配置

    1. #指定服务名称
    2. spring.application.name=consumer-application
    3. #指定注册中心
    4. dubbo.registry.address=zookeeper://localhost:2181

    第四步:启动类

    1. package com.zl;
    2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. @SpringBootApplication
    6. @EnableDubbo
    7. public class DubboConsumerApplication {
    8. public static void main(String[] args) {
    9. SpringApplication.run(DubboConsumerApplication.class, args);
    10. }
    11. }

    4. 注册中心Zookeeper的安装

    解压下载好的Zookeeper压缩包:

    C:\dev\Zookeeper\apache-zookeeper-3.5.5-bin\conf\zoo.cfg进行配置

    1. # The number of milliseconds of each tick
    2. tickTime=2000
    3. # The number of ticks that the initial
    4. # synchronization phase can take
    5. initLimit=10
    6. # The number of ticks that can pass between
    7. # sending a request and getting an acknowledgement
    8. syncLimit=5
    9. # the directory where the snapshot is stored.
    10. # do not use /tmp for storage, /tmp here is just
    11. # example sakes.
    12. #dataDir=/tmp/zookeeper
    13. #修改存放临时生成的数据的目录
    14. dataDir=C:/dev/Zookeeper/apache-zookeeper-3.5.5-bin/data
    15. # the port at which the clients will connect
    16. #端口号
    17. clientPort=2181
    18. #需要启动另外一个服务,默认端口是8080,防止冲突修改一下
    19. admin.serverPort=8888
    20. # the maximum number of client connections.
    21. # increase this if you need to handle more clients
    22. #maxClientCnxns=60
    23. #
    24. # Be sure to read the maintenance section of the
    25. # administrator guide before turning on autopurge.
    26. #
    27. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    28. #
    29. # The number of snapshots to retain in dataDir
    30. #autopurge.snapRetainCount=3
    31. # Purge task interval in hours
    32. # Set to "0" to disable auto purge feature
    33. #autopurge.purgeInterval=1

    执行zkServer.cmd程序,启动Zookeeper

     启动提供者和消费者项目的启动类

    进行访问

    图书推荐:《Python 自动化办公应用大全》

    本次送书 1本! 
    活动时间:截止到 2023-09-29 00:00:00。

    抽奖方式:利用程序进行抽奖。

    参与方式:关注博主(只限粉丝福利哦)、点赞、收藏,评论区随机抽取,最多三条评论!

    关键点

    1. 借助ChatGPT与Python轻松实现办公自动化。

    2. Excel Home多位微软全球MVP专家打造,用大量实例介绍使用Python操作Excel、Word、PPT和日常办公中涉及的各种对象。

    3. 方式新颖 详细介绍了如何用 ChatGPT 来补充学习知识点,以及如何快速生成所需的代码,零基础人员学习编程的成本进一步降低。

    4. 内容丰富 以Excel数据处理与分析为重点,延展到 Word、PPT、邮件、图片、视频、音频、本地文件管理、网页交互等现代办公所需要处理的各种形式的数据。

    5. 案例实用 用大量易借鉴的案例帮助用户学会在各个场景中使用自动化技术。

    6. 作者权威 Excel Home团队策划,多位微软全球最有价值专家(MVP)通力打造,确保每个案例都实用,对编程小白友好。

    7. 让没有编程经验的普通办公人员也能驾驭 Python,实现多个场景的办公自动化,提升效率!

    内容简介

    以Excel数据处理与分析为重点,延展到 Word、PPT、邮件、图片、视频、音频、本地文件管理、网页交互等现代办公所需要处理的各种形式的数据。

    当当网链接:《Python自动化办公应用大全(ChatGPT版)

    京东的链接:京东安全

  • 相关阅读:
    Python命令行可以用下划线_代表上一次计算的结果
    大模型之Prompt研究和技巧
    企业复杂的数据治理需求,TempoDF让数据开发更简单!
    GPR 子波 一阶微分高斯脉冲和Ricker子波
    linux 运维 经常逛的几个官网文档
    Java中循环删除list报错解析
    JAVA计算机毕业设计信管专业毕业生就业管理信息系统Mybatis+源码+数据库+lw文档+系统+调试部署
    m3u8,rtsp,rtmp,flv,mp4直播流在线测试地址(2022年8月)
    服务老是被攻击,如何设计一套比较安全的接口访问策略?
    抖音API接口大全
  • 原文地址:https://blog.csdn.net/m0_61933976/article/details/133126271