当前位置: 首页 > 图灵资讯 > 技术篇> 抽象公共代码块,使用Dubbo RPC框架实现子系统间的高性能调用

抽象公共代码块,使用Dubbo RPC框架实现子系统间的高性能调用

来源:图灵教育
时间:2023-06-09 10:10:49

  • 为什么要抽象公共代码块?

因为对于同一模块,如公共优势,需要在不同的模块中重复写作,我们程序员最禁忌的是重复写作,可以将多个模块中的重复代码抽象成公共代码块,然后通过maven引入

  • 如何抽象成公共代码块

在我的项目中,我将模型层和业务层抽象成common项目中的公共模块

项目结构图

抽象公共代码块,使用Dubbo RPC框架实现子系统间的高性能调用_ide

然后在需要的项目中使用maveninstall指令进行pom.引入xml

  • 为何需要Dubbo? RPC

在我们使用的网关项目中,没有操作数据库的包。当我们需要操作数据库时,我们需要使用CV法吗?

有没有可以直接调用其他项目的操作方法?

我们需要像调用本地方法一样使用RPC(远程调用)来调用远程方法

RPC调用模型

抽象公共代码块,使用Dubbo RPC框架实现子系统间的高性能调用_代码块_02

  • 怎么实现

选择nacos作为注册中心

https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html

通过官方文件快速下载并启动注册中心

引入依赖于服务提供商和消费者的服务

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo</artifactId>            <version>3.0.9</version>        </dependency>        <dependency>            <groupId>com.alibaba.nacos</groupId>            <artifactId>nacos-client</artifactId>            <version>2.1.0</version>        </dependency>

Provider

aplication配置文件.yml

dubbo:  # 应用名  application:    name: dubbo-springboot-demo-provider  # 协议信息  protocol:    name: dubbo    port: -1  # 注册中心地址  registry:    id: nacos-registry    address: nacos://localhost:8848

在主启动类中添加@Enabledubo注释

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})@MapperScan("com.xc.project.mapper")@EnableScheduling@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)@EnableDubbopublic class MainApplication {    public static void main(String[] args) {        SpringApplication.run(MainApplication.class, args);    }}

注释需要提供给注册中心的类别,如界面统计次数加1的方法

@DubboServicepublic class InnerUserInterfaceInfoServiceImpl implements InnerUserInterfaceInfoService {    @Resource    private UserInterfaceInfoService userInterfaceInfoService;    @Override    public boolean invokeCount(long interfaceInfoId, long userId) {        return userInterfaceInfoService.invokeCount(interfaceInfoId, userId);    }    @Override    public boolean leftInvokeCount(long interfaceInfoId, long userId) {        return userInterfaceInfoService.leftInvokeCount(interfaceInfoId, userId);    }}

Consumer

aplication配置文件.yml

dubbo:  # 应用名  application:    name: dubbo-springboot-demo-consumer  # 协议信息  protocol:    name: dubbo    port: -1  # 注册中心地址  registry:    id: nacos-registry    address: nacos://localhost:8848

网关项目的主要启动类别加上相应的注释

@SpringBootApplication(exclude = {        DataSourceAutoConfiguration.class,        DataSourceTransactionManagerAutoConfiguration.class,        HibernateJpaAutoConfiguration.class})@EnableDubbopublic class XcapiGatewayApplication {    public static void main(String[] args) {        SpringApplication.run(XcapiGatewayApplication.class, args);    }}

通过dubo注入网关拦截器中需要调用的接口

@DubboReference    private InnerUserService innerUserService;    @DubboReference    private InnerInterfaceInfoService innerInterfaceInfoService;    @DubboReference    private InnerUserInterfaceInfoService innerUserInterfaceInfoService;

在provider中,可以实现远程调用