微服务失败场景有知道的吗?

我正在研究微服务架构。我的一个服务暴露在源系统中,用来发布数据。这个微服务将数据发布到redis。我正在使用redis pubsub。这是由几个微服务进一步消费。

现在如果另一个微服务宕机了,无法处理redis pubsub的数据,那么当微服务出现时,我就必须用发布的数据重新尝试。源端无法再次推送数据。由于源头无法重新推送数据,人工干预也不可能,所以我想到了3个办法。

  1. 另外使用redis数据进行存储和检索。
  2. 使用数据库进行存储再发布。我有很多源和目标微服务都使用redis pubsub。现在,如果我使用这种方法,每次我都要先把请求插入DB中,然后再看它的响应状态。现在我不得不使用共享数据库,这种方法本身就增加了一些异常处理的情况,对我来说并不是很有效。
  3. 如果redis pubsub的话,就用kafka来代替。由于流量不大,所以我用的是Redis pubsub,不可行改。

在上述两种情况下,我都必须使用调度器,而且我有一个持续时间,在此之前,我必须重试,否则后续的请求将失败。有没有其他方法来处理上述情况。

spring-boot
redis
java-8
2023-05-06 14:30:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
懂事的小马

一开始,正如你所提到的,我们确实似乎只有三种可能

这种情况下,你想在推送后和处理后得到服务的握手。为了达到同样的目的,使用中间件排队系统将是一个正确的选择。

虽然完成起来比较复杂,但你可以做的是使用Kafka来进行流式处理。正确配置生产者和消费者组可以帮助你顺利完成工作。

考虑到你 "这个数据是要处理的,而且要持久化 "的情况,使用DB来存储就显得矫枉过正了。

BUT,或者,将数据存储到Redis,并在cron-jobscheduled作业中读取数据,会让你的工作变得更简单。一旦作业运行成功,你可以从缓存中删除数据,从而节省Redis内存。

如果你能在架构和实现上进一步发表更多的意见,我可以继续更新我的答案。

分享
微博
QQ
微信
回复
2023-05-06 16:26:49
相关问题
mqtt服务器通信有知道
1345浏览 • 1回复 待解决
微服务前后台用户是否分开?
1636浏览 • 1回复 待解决
mysql 索引问题有知道
1550浏览 • 1回复 待解决
WebView层级问题有知道
4082浏览 • 1回复 待解决
依赖包冲突有知道
1236浏览 • 1回复 待解决
mqtt协议使用有知道
1236浏览 • 1回复 待解决
mysql共享锁问题有知道
1055浏览 • 1回复 待解决
centos 6 安装 postgresql有知道?
1124浏览 • 1回复 待解决
开发调试问题有知道
1021浏览 • 1回复 待解决
鸿蒙怎么接收广播有知道
9658浏览 • 1回复 待解决
ets组件定位问题有知道?
1904浏览 • 1回复 待解决
关于图片组件问题有知道
687浏览 • 1回复 待解决
Ubuntu terminal切换问题有知道
1087浏览 • 1回复 待解决
如何设置屏幕亮度有知道
858浏览 • 1回复 待解决
创建json文件问题有知道
1947浏览 • 1回复 待解决
关于msmq消息队列有知道
1126浏览 • 1回复 待解决
Grid嵌套滚动问题有知道
1508浏览 • 1回复 待解决
如何判断前后台进程,有知道
728浏览 • 1回复 待解决
Mysql怎么添加外键有知道
983浏览 • 1回复 待解决
Api9 Stage问题有知道
271浏览 • 1回复 待解决
跨模块路由跳转问题有知道
960浏览 • 1回复 待解决
Redis 竞态条件问题有知道
2199浏览 • 1回复 待解决
关于禁用屏保问题有知道
1652浏览 • 1回复 待解决
api网关推荐有知道
1190浏览 • 1回复 待解决