【发布时间】:2019-11-05 22:26:08
【问题描述】:
我正在设计一个接收请求的服务,该请求只能执行一次(由于存在唯一的 ID,可以多次接收)。
流程是:
外面的世界 -> HTTP -> [Myservice的一组实例] -> HTTP -> 供应商服务
所以,我通过 HTTP 接收到一堆请求,我希望进行一些转换、检查、将请求存储在数据库中并通过 HTTP 发送到供应商服务。
我的问题是:
什么是在我的服务中实现存储转发模式的有效方法,即接收请求并立即存储它,因此立即将其发送到“外部世界”,然后在我自己的时间将其转发到目标服务,根据需要重试多次?
问题:
- 如果 myservice 的其中一个实例在向供应商服务发送请求时出现故障怎么办?
- 如果有一堆请求未转发,我将如何监控?
- 如何避免另一个编排服务?
- 如何避免另一个单实例服务有效地监视数据库并转发任何尚未转发的请求。
- 如何最小化外部依赖 - 例如我知道这里的某种队列可能有助于解决这个问题,但我想看看我是否可以避免这种情况。
【问题讨论】:
-
你可能会发现使用消息代理之类的东西有一些好处,它允许你持久化消息并在处理器确认时删除它们(我认为 kafka 给了你)
-
是的,你是对的!我试图弄清楚是否有一种方法可以在没有其他依赖项的情况下做到这一点,即消息代理 - kafka、mq 等。
-
您有矛盾的要求。您想要只有经过数年才能构建的成熟中间件才能提供的功能,但您希望它们不费吹灰之力就可以实现。
标签: java design-patterns architecture microservices resiliency