如何正确使用 ServiceStack IServiceGateway 方法?

How to use correctly ServiceStack IServiceGateway methods?

IServiceGateway提供两种主要的同步方式来调用服务。

void IServiceGateway.Publish(object requestDto)

T Send<T>(IReturn<T> request)

我知道 Send() 允许我使用 return 类型,而 Publish() 不行。 现在假设 T 实现了 IReturnVoid,我应该使用 Publish() 还是 Send()? 有什么不同?

谢谢。

Publish() API 应该在语义上用于时间分离的 "One Way" 操作,例如 "Fire and Forget" 请求。

如何处理它们取决于网关的实现,例如在所有服务客户端中 Publish() 将请求 DTO 发送到 ServiceStack 的 /oneway 预定义端点,如果 MQ 已注册,则将其发布到 MQ 而不是执行它,如果未注册 MQ,则行为与调用相同Send(),除了成功的响应将被丢弃。

虽然它通常用于 IReturnVoid 请求,但它们也可以用于普通请求,例如如果系统支持使用 CreateJob 创建系统作业,客户可以调用 Send() 如果他们希望作业立即执行并且需要等到它完成,或者他们可以调用 Publish() 开始长 - 运行 个他们只想排队在后台执行但不需要等待完成结果的作业。