【发布时间】:2020-08-17 14:56:42
【问题描述】:
我正在研究微服务架构。我的一项服务暴露于用于发布数据的源系统。该微服务将数据发布到 redis。我正在使用 redis 发布/订阅。几个微服务进一步消耗了它。
现在,如果其他微服务关闭并且无法处理来自 redis pub/sub 的数据,那么当微服务启动时,我必须使用已发布的数据重试。源不能再次推送数据。由于源无法重新推送数据且无法手动干预,因此我采用了 3 种方法。
- 另外使用 redis 数据进行存储和检索。
- 在发布前使用数据库进行存储。我有许多使用 redis pub/sub 的源和目标微服务。现在,如果我每次都使用这种方法,我必须先将请求插入数据库而不是其响应状态。现在我必须使用共享数据库,这种方法本身会增加几个异常处理案例,对我来说效率不高。
- 如果 redis pub/sub 使用 kafka 就地。由于流量很低,所以我使用了 Redis pub/sub,并且无法更改。
在上述两种情况下,我都必须使用调度程序,并且我有一个持续时间,在此之前我必须重试,否则后续请求将失败。 有没有其他方法可以处理上述情况。
【问题讨论】:
-
在您的第二种方法中,您似乎正在尝试实现消息代理。如果我正确理解了您的要求,那么 rabbitmq 对您来说将是简单且足够好的,因为您说流量很低。
标签: spring-boot java-8 redis architecture microservices