java - 微服务异步通信断路器
问题描述
我有 2 个使用 spring boot 运行的服务,我有以下情况:
服务 A(N 个实例)-> 队列(多个实例)-> 服务 B(N 个实例)
- 服务 A 排队事件异步
- 服务 B 出队事件
流量正在增加,我们注意到事件在队列中花费了大量时间。我们需要更快地处理事件。每个事件的有效负载都很小,这个解决方案已经工作了几年,几年前他们认为排队是个好主意,但现在我遇到了这个性能问题。
- 我正在考虑在服务 B 中创建一个端点并从服务 A 中访问该端点。
这个调用应该是异步的,并且还实现了一个断路器,以避免在 B 出现故障时丢失消息。如果 B 出现故障,我可以使用队列来保存消息,一旦 B 运行并再次从队列中拉出消息。
我有两个问题:
是否可以为异步调用实现断路器或故障转移机制?
您认为还有其他更好的方法吗?
谢谢
解决方案
提问
是的,有可能,我假设您正在使用 spring boot,因为您在标签中提到了 java,因此有一种称为 RetryTemplate 的机制,您也可以将其用于异步调用,您可以在此处找到更多详细信息-> https:/ /www.openprogrammer.info/2019/09/03/using-spring-boot-async-with-retry/
我会说有更好的方法,当你在这里说队列时你实现了什么?喜欢它是 LIFO 还是 AWS SQS 之类的东西?如果是这种情况,那么您可以尝试寻找基于主题的队列机制,例如 apache kafka
推荐阅读
- omnet++ - OMNet++中peek命令的作用是什么
- c# - Specflow 3.3 中 NullValueRetriever 功能的替换
- powershell - 如何使用 Invoke-RestMethod 从 Powershell 发布
- google-chrome - 在 Chrome devtools 中多次加载字体
- python - Python 调用 boost .so 文件库未加载错误
- ssis - 将文件上传到 SFTP 后 WinSCP 挂起
- react-native - 错误:没有为关键的 Add Grocery Item 定义路由。必须是以下之一:“屏幕”堆栈操作
- typescript - 设计与数据源无关的模型
- oracle - 如何更改 tnsping 使用的参数文件?
- google-apps-script - 使用 App 脚本移动非活动谷歌表格