[SpringBoot 2] 任务 和 Dubbo+ Zookeeper

发布时间 2023-10-03 21:24:03作者: Roy2048

SpringBoot_2


1. 任务

1.1 异步任务:

方法上添加@Async, Application方法上开启异步@EnableAsync

1.2 邮件任务:

添加 spring-boot-starter-mail

在自己的邮件账户中打开POP3/SMTP协议, 并获取到授权码

spring.mail.host=smtp.服务器host.com

(具体着相关的文档)

注入JavaMailSenderImpl就可以使用了

1.3 定时任务:

Springboot中有两个类和定时任务有关:

TaskSchedule 任务调度者

TaskExecutor 任务执行者

注解方面:

@EnableScheduling在applicaiton上开启注解

@Scheduled放在具体的方法上在什么时候去执行

cron表达式用来表达表示什么时候执行(时间相关)

使用只需要在方法上写@Scheduled(core = "* * * * * *")即可

2. 分布式 Dubbo Zookeeper

集群: 多个机器做同样的事情(类似pod)

分布式: 不同的节点做不同的事情(微服务是分布式的一种解决方案)

2.1 RPC

Remote Procedure Call 远程过程调用(程序调用另一个地址空间的过程或者函数, 而RPC就是要像调用本地的函数一样去调用远程函数)

本机方法A()调用本机方法B(), 是本地调用

本机方法A()调用远程机器的方法B(), 是远程调用(网络不可靠)

RPC的两个核心: 通信(http也可以做) 序列化(方便数据传输)

Dubbo就是用来解决通信和序列化这些比较繁琐的问题

2.2 Dubbo

三大核心能力: 面向接口的远程方法调用, 智能容错和负载均衡, 服务自动注册和发现

Provider: 服务提供者, 在init时, 向注册中心注册自己提供的服务

Consumer: 调用远程服务的消费者, 消费者init时, 向注册中心订阅自己需要的服务;

Registry: 注册中心, 返回提供者地址列表给消费者, 如果有变更, 注册中心将基于长连接推送变更数据给消费者

Monitor: P和C发送统计数据给Monitor(可要可不要)

2.3 ZooKeeper

一个注册中心(提供注册与发现)

2.4 SpringBoot整合Dubbo和Zookeeper

本地启动一个Zookeeper程序(Zookeeper需要单独下载运行, 是一个独立的程序), 运行在127.0.0.1:2181端口

springBoot中写两个项目, 一个provider, 一个consumer, 要在consumer项目中调用provider项目中提供的函数;

两个项目中导入Dubbo和zookeeper包, 然后把服务注册到Zookeeper中

  • 在Provider中:
#指定服务的应用名
#指定注册中心的地址
#指定那些服务要被扫描进去注册
dubbo: 
    application: 
        name: provider-service
    registry: 
        address: zookeeper://127.0.0.1:2181
    scan: 
        base-packages: com.xxx(项目的某个目录)

同时, 在要被扫描的类上加上@DubboService注解(首先是被spring托管的)

  • 在Customer中:

yml指定服务应用名和注册中心地址,

在使用时, 写个和provider中相同地址的接口(注意: dubbo下, 这个包的路径必须完全相同, 因为包路径也注册到了注册中心中, 而springcloud不用这样)(类似于springCloud中的feign)然后使用时自动注入这个类, 并写@DubboReference来调用远程的类, 而不是本地的类方法

  • SpringCloud

这四个是需要核心解决的问题(原因: 网络是不可靠的)