部署多个微服务,业务逻辑都是一样的,就是做定时任务。在spring cloud中如何均匀的让每个微服务都做定时任务,互相不冲突
发延迟消息
设置互斥锁,例如给 redis 设置一个 nx 的 key
采用 zookeeper 的选举机制做定时任务,springcloud 的话 eureka 应该也会有类似的机制吧
不复杂的情况,可以使用数据库来简单实现。
像mysql有内置的程序锁函数:
get_lock() // 获取锁
release_lock() // 释放锁
具体的函数使用可以查看mysql的函数介绍
使用这种方式来控制分布式任务切换有个注意事项,这个锁的获取和释放是和数据库连接相关,一个连接创建的锁只能这个连接自己释放,这就需要在数据库连接池做改动,不过最简单还是直接原生jdbc获取数据库连接,不使用连接池来获取连接,拿到锁,执行该微服务的任务,任务完成后使用该连接释放锁。做小数量分布式任务切换没问题,大数量就得考虑复杂的切换框架了……
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.8k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
4 回答1.9k 阅读
一个办法就是用任务队列,将任务发布到队列里,然后让空闲的微服务自动去领取。这样就不会有冲突了。