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

我正在研究微服务架构。我的一个服务暴露在源系统中,用来发布数据。这个微服务将数据发布到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服务器通信有知道
2479浏览 • 1回复 待解决
mysql 索引问题有知道
2580浏览 • 1回复 待解决
依赖包冲突有知道
2470浏览 • 1回复 待解决
WebView层级问题有知道
5335浏览 • 1回复 待解决
AES 加密问题,有知道
159浏览 • 1回复 待解决
微服务前后台用户是否分开?
2742浏览 • 1回复 待解决
obproxy路由问题有知道
4589浏览 • 2回复 待解决
api网关推荐有知道
2038浏览 • 1回复 待解决
如何安装OceanBase有知道
3070浏览 • 1回复 待解决
mqtt协议使用有知道
2579浏览 • 1回复 待解决
SQL解析问题有知道
3092浏览 • 1回复 待解决
ohos:remote问题有知道
4190浏览 • 1回复 待解决
请问imanaer问题有知道
2807浏览 • 0回复 待解决
mysql共享锁问题有知道
2285浏览 • 1回复 待解决
ets组件定位问题有知道?
2994浏览 • 1回复 待解决
centos 6 安装 postgresql有知道?
2248浏览 • 1回复 待解决
鸿蒙怎么接收广播有知道
11367浏览 • 1回复 待解决
开发调试问题有知道
2089浏览 • 1回复 待解决
电话拦截规则有知道?
3000浏览 • 1回复 待解决
如何删除样机管理有知道
2356浏览 • 1回复 待解决
单向绑定问题,有知道方法
751浏览 • 1回复 待解决
什么是PolarDB实例有知道
3814浏览 • 1回复 待解决
如何使用字体有知道?
2210浏览 • 1回复 待解决
关于redis 集群问题有知道
2131浏览 • 1回复 待解决