Springboot快速回顾(集成Dubbo)

news2024/11/18 9:48:33

Dubbo是实现远程调用的一个框架,阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块,部署在不同的服务器上。若将公共模块集中部署在一台服务器上,可以方便其他服务器调用。因此,需要Dubbo。

此外参考Dubbo官方手册,Dubbo自己提供注册中心,需要在provider项目中配置文件里配置dubbo协议才能使用,目前主流的办法是使用zookeeper注册中心。

本案例提供三个模块演示springboot项目如何集成Dubbo
015_interface_api 公用模块

项目类型:maven java工程
描述:存放实体bean和业务接口
负责业务模块:Model,Service

016_springboot_provider :服务提供者

项目类型:SpringBoot web工程
描述:实现业务接口中的接口
负责业务模块:ServiceImpl,Mapper

017_consumer:服务消费者

项目类型:SpringBoot web工程
描述:处理从浏览器客户端发送的请求,就是 Controller 层
负责业务模块:Controller

目录

  • 015_interface_api
  • 016_springboot_provider
    • 1 导入额外的依赖
    • 2 实现stuServiceimpl
    • 3 配置application.properties文件
    • 4 @EnableDubbo注解 启动服务
  • 017_consumer
    • 1 导入额外依赖
    • 2 实现controller类 并启动
    • 3 配置application.properties文件
  • 启动项目步骤

015_interface_api

在这里插入图片描述
stu类

/**
 * Dubbo 实体 Bean 需实现 Serializable ,否则会报错
 */
public class stu implements Serializable {
    private String name;
    private Integer age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

stuService

public interface stuService {
    stu queryStudent(Integer id);
}

016_springboot_provider

1 导入额外的依赖

在这里插入图片描述

 <!-- 1、导入项目015的依赖-->
        <dependency>
            <groupId>com.zjh</groupId>
            <artifactId>015_interface_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- 2、导入Dubbo依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>

        <!-- 3、导入Zookeeper依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.8</version>
            <type>pom</type>
            <!-- 禁用zookeeper的日志,因为Dubbo自己也携带了一个,多个日志重复-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2 实现stuServiceimpl

//写此注解是为了确保注入到容器
@Service

//@DubboService说明:使用dubbo的注解暴露服务,版本号自定义
@DubboService(interfaceClass = stuService.class, version = "1.0" )
public class stuServiceImpl implements stuService {

    @Override
    public stu queryStudent(Integer id) {
        stu student = new stu();
        if( 1001 == id){
            student.setName("zjh");
            student.setAge(10);
            student.setSex("男");
        }

        return student;
    }
}

3 配置application.properties文件

# 配置服务名称 dubbo:application name="名称"
spring.application.name=stuservice-provider

# 配置扫描的包,扫描的@DubboService
dubbo.scan.base-packages=com.zjh.service

# 配置注册中心
dubbo.registry.address=zookeeper://localhost:2181

4 @EnableDubbo注解 启动服务

@SpringBootApplication
//启动Dubbo
@EnableDubbo
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }

}

017_consumer

在这里插入图片描述

1 导入额外依赖

在provider依赖的基础上再加一个web依赖

<!-- 4、web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2 实现controller类 并启动


@RestController
//消费者也启动Dubbo
@EnableDubbo
public class DubboController {

    //原本需要@ resource自动注入
    @DubboReference(interfaceClass = stuService.class, version = "1.0")
    private stuService stuservice;

    @RequestMapping("/dubbo/{stu_id}")
    public String HelloSubbo(@PathVariable("stu_id")Integer id){

        stu stu = stuservice.queryStudent(id);
        return "远程调用接口,获取对象:"+stu.toString();
    }

}

3 配置application.properties文件

# dubbo服务命名 dubbo:application name="名称"
spring.application.name=stuservice-consumer

# 注册中心
dubbo.registry.address=zookeeper://localhost:2181

启动项目步骤

  1. 启动安装的zookeeper服务
  2. 依次启动provider服务,consumer服务
  3. 输入localhost:8080/dubbo/id=1001

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习实践大全

文章目录 1.可视化调试1.1 各通道相加可视化1.2 降维到3维或2维 1.可视化调试 可视化方法可分为&#xff1a;各通到相加可视化、 1.1 各通道相加可视化 def visualize_feature_map(img_batch,out_path,type,BI):feature_map torch.squeeze(img_batch)feature_map feature_…

C++教程(二)——第一个程序:编写hello world

1、点击左上角【文件】&#xff0c;再点击创建【项目】&#xff0c;设置项目名称&#xff0c;选择存储地址&#xff0c;再应用。 2、首先在解决方案资源管理器中点击【源文件】&#xff0c;右键【添加】--->【新建项】。 3、在弹出窗口中选择C文件(.cpp)&#xff0c;设置名称…

【考研思维题】【哈希表 || 什么时候用哈希表呢?快速查询的时候】【我们一起60天准备考研算法面试(大全)-第九天 9/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【webrtc】ProcessThreadAttached

RegisterModule 调用所在的线程指针传递给ProcessThreadAttached ProcessThreadAttached 调用不是在worker thread 而是在 registers/deregister 这个module或者 start stop 这个module的时候 ** ** pacedsender是一个moudle -实现了

【Zabbix 监控设置】

目录 一、添加 zbx-agent01 客户端主机1、服务端和客户端都配置时间同步2、服务端和客户端都设置 hosts 解析3、设置 zabbix 的下载源&#xff0c;安装 zabbix-agent24、修改 agent2 配置文件5、启动 zabbix-agent26、在服务端验证 zabbix-agent2 的连通性1、常用的键值 7、在 …

Nginx 技术

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器&#xff0c;同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;公开版本1.19.6发布于2020年12月15日。 其将源代码以类 BSD 许可证的形式发布&…

论文阅读 | UniFormer

UniFormer: Unified Multi-view Fusion Transformer for Spatial-Temporal Representation in Bird’s-Eye-View 文章目录 UniFormer: Unified Multi-view Fusion Transformer for Spatial-Temporal Representation in Bird’s-Eye-View摘要介绍Question: 说了半天这个时空融合…

开放式耳机漏音严重吗?开放式耳机哪个品牌好?

开放式耳机因其不入耳、不伤耳设计&#xff0c;深受大家喜欢&#xff0c;开放式耳机不会对耳朵产生任何物理伤害&#xff0c;也不会影响听觉神经&#xff0c;所以不会出现传统入耳式耳机音质损伤的问题。相信还有部分用户不知道什么是开放式耳机&#xff1f;开放式漏音严重吗&a…

剑指Offer-29-顺时针打印矩阵

剑指Offer-29题 题目描述&#xff1a;顺时针打印矩阵 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 **题解思路&#xff1a;**使用 模拟 的方法 定义四个边界变量表示当前要遍历的边界&#xff1a;上(top)、下(bottom)、左(left)、右(right)&am…

爬取新闻评论数据并进行情绪识别

一、为什么要爬取新闻评论数据并进行情绪识别&#xff1f; 爬取新闻评论数据并进行情绪识别的目的是为了从网页中抓取用户对新闻事件或话题的评价内容&#xff0c;并从中识别和提取用户的情绪或态度&#xff0c;如积极、消极、中立等。爬取新闻评论数据并进行情绪识别有以下几个…

mysql查看引擎、默认引擎、表引擎

文章目录 1、查看mysql 数据库引擎2、查看mysql当前默认的存储引擎3、查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):扩展知识&#xff1a;最常使用的2种存储引擎: 1、查看mysql 数据库引擎 命令&#xff1a; SHOW ENGINES 2、查看mysql当…

CPU高速缓存cache分类与查看

cat /sys/devices/system/cpu/cpu0/cache/index0/size #查看L1数据缓存大小 2~4 个时钟周期 cat /sys/devices/system/cpu/cpu0/cache/index1/size #查看L1指令缓存大小 2~4 个时钟周期 cat /sys/devices/system/cpu/cpu0/cache/index2/size #查看 CPU 里的 L2 Cache 的容量大…

PROFINET转ETHERNET/IP网关西门子通讯协议profinet

大家好&#xff0c;今天我们来聊一款令人兴奋的产品——远创智控YC-PN-EIP&#xff01;它是一款自主研发的 PROFINET 从站功能的通讯网关&#xff0c;可以将 PROFINET网络和ETHERNET/IP 网络连接起来&#xff0c;实现数据传输和交换。但这只是它的基础功能&#xff0c;它还有哪…

定时器中断

背景&#xff1a;使用动态数码管读取光电传感器的值并且显示&#xff0c;因此要使用到定时器&#xff0c;每隔一个阶段进行一次检测并进行中断。 51单片机里的关于中断的寄存器如下&#xff1a; IE – 中断允许控制寄存器 IP – 中断优先级控制寄存器 TMOD – 定时器工作方式寄…

操作系统12:I/O系统的功能、模型、接口及 I/O 设备和设备控制器

目录 1、I/O系统的功能、模型和接口 &#xff08;1&#xff09;I/O系统的基本功能 1.1 - 隐藏物理设备的细节 1.2 - 与设备的无关性 1.3 - 提高处理机和I/O设备的利用率 1.4 - 对 I/O 设备进行控制 1.5 - 确保对设备的正确共享 1.6 - 错误处理 &#xff08;2&#xff…

浅谈用于配电室的内部环境监控系统设计

摘要&#xff1a;配电室是配电系统的重要组成部分&#xff0c;影响着电力用户的用电需求&#xff0c;需要保障其安全、可靠运行。针对配电室内部环境进行了深入分析&#xff0c;设计了一种内部环境监控系统。通过该系统可以采集配电室内部的温度、湿度、液位、SF6气体和烟雾&am…

Unity游戏开发智能巡逻兵

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.1 游戏设计要求&#xff1a; 创建一个地图和若干巡逻兵(使用动画)&#xff1b; 每个巡逻兵走一个3~5个边的凸多边型&#xff0c;位置数据是相对地址。即每次确定下一个目标位置&#xff0c;用自己当前位置…

STM32单片机不同型号之间的HAL库代码移植浅谈(代码解析)

在嵌入式系统开发中&#xff0c;STM32HAL库是一种常用的软件开发工具&#xff0c;用于开发STM32系列微控制器的应用程序。由于不同型号的芯片具有不同的硬件架构和外设&#xff0c;因此在将代码移植到不同类型的芯片上时&#xff0c;需要进行一些适配和调整。 首先&#xff0c;…

wps中excel如何实现模糊搜索匹配的内容(可以匹配想要的各种格式)

1&#xff0c;在某一列进行搜索-筛选搜索-如包含“XXX信息XX公司XX”这种格式的。 输入 &#xff1a;信息*公司 &#xff08;1&#xff09;选择第一种搜索方式代表寻找符合条件&#xff1a; 包含信息和公司两个关键字&#xff0c; 且信息在前公司在后&#xff0c; 且两个词语之…