关于何时查询数据库进行读取操作的指导应使用公共交通 request/response 进行限时操作
Guidance as to when querying the database for read operation should be done using mass transit request/response for timebound operation
对于创建操作,很明显,将消息放入队列是一个好主意,以防处理或创建该实体花费的时间比预期的长,以及队列带来的其他好处。
但是,对于有时间限制的读取操作(必须在 3 秒内从 return 到 UI),队列是否是个好主意并不完全清楚。
http://masstransit-project.com/MassTransit/usage/request-response.html 提供了一个很好的抽象,但它通过队列。
有人可以提供一些建议,说明我为什么或为什么不使用公共交通工具或影响任何技术(如 nservicebus 等)进行 UI 有时限的数据库读取操作?
我应该只对长 运行 流程使用公共交通吗?
Request/Reply 是限时操作的完美有效模式。例如,RabbitMQ 的传输成本非常低。我使用 ServiceStack(非常快)和 MassTransit 测量了 request/response 的性能。 MassTransit 在缓存端点时存在初始延迟,但除此之外速度几乎相同。
这里的好处是:
- 重试
- 超时微调
- 与竞争消费者轻松扩展
仅举出最明显的几个。
通过错误处理,您的请求最终会出现在错误队列中,因此不会丢失数据,您可以随时查看错误原因和原因。
更新:有一个 SOA 模式描述了这种(或类似的)方法。它被称为Decoupled Invocation。
对于创建操作,很明显,将消息放入队列是一个好主意,以防处理或创建该实体花费的时间比预期的长,以及队列带来的其他好处。
但是,对于有时间限制的读取操作(必须在 3 秒内从 return 到 UI),队列是否是个好主意并不完全清楚。
http://masstransit-project.com/MassTransit/usage/request-response.html 提供了一个很好的抽象,但它通过队列。
有人可以提供一些建议,说明我为什么或为什么不使用公共交通工具或影响任何技术(如 nservicebus 等)进行 UI 有时限的数据库读取操作? 我应该只对长 运行 流程使用公共交通吗?
Request/Reply 是限时操作的完美有效模式。例如,RabbitMQ 的传输成本非常低。我使用 ServiceStack(非常快)和 MassTransit 测量了 request/response 的性能。 MassTransit 在缓存端点时存在初始延迟,但除此之外速度几乎相同。
这里的好处是:
- 重试
- 超时微调
- 与竞争消费者轻松扩展
仅举出最明显的几个。
通过错误处理,您的请求最终会出现在错误队列中,因此不会丢失数据,您可以随时查看错误原因和原因。
更新:有一个 SOA 模式描述了这种(或类似的)方法。它被称为Decoupled Invocation。