- 为什么要抽象公共代码块?
因为对于同一模块,如公共优势,需要在不同的模块中重复写作,我们程序员最禁忌的是重复写作,可以将多个模块中的重复代码抽象成公共代码块,然后通过maven引入
- 如何抽象成公共代码块
在我的项目中,我将模型层和业务层抽象成common项目中的公共模块
项目结构图
然后在需要的项目中使用maveninstall指令进行pom.引入xml
- 为何需要Dubbo? RPC
在我们使用的网关项目中,没有操作数据库的包。当我们需要操作数据库时,我们需要使用CV法吗?
有没有可以直接调用其他项目的操作方法?
我们需要像调用本地方法一样使用RPC(远程调用)来调用远程方法
RPC调用模型
- 怎么实现
选择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中,可以实现远程调用