servicestack - 如何正确使用 ServiceStack IServiceGateway 方法?
问题描述
IServiceGateway
提供两种主要的同步方法来调用服务。
void IServiceGateway.Publish(object requestDto)
T Send<T>(IReturn<T> request)
我知道这Send()
允许我使用返回类型,而Publish()
没有。现在想象一下,T
我IReturnVoid
应该使用Publish()
还是Send()
?有什么区别?
谢谢你。
解决方案
API 应该在Publish()
语义上用于时间解耦的“单向”操作,如“即发即弃”请求。
如何处理它们取决于网关实现,例如,在所有服务客户端中Publish()
,将请求 DTO 发送到 ServiceStack 的 /oneway 预定义端点,如果注册了 MQ,则如果没有 MQ,则将其发布到 MQ 而不是执行它注册的行为与调用相同Send()
,只是成功的响应将被丢弃。
虽然它通常与IReturnVoid
请求一起使用,但它们也可用于普通请求,例如,如果系统支持使用 创建系统作业CreateJob
,客户端可以调用Send()
如果他们希望立即执行作业并且需要等到它完成,或者他们可以调用Publish()
开始长时间运行的作业,他们只是想排队在后台执行,但不需要等待完成的结果。
推荐阅读
- python - PyCharm 检查没有在类型注释中显示我自己的类的警告
- javascript - 贝宝付款待处理和已完成交易(相同的)具有不同的 tx_ids
- python - Python 3 asyncio 和 GIL(如何使用所有 cpu 内核 - 除了 ProcessPoolExecutor 之外的任何其他选项)?
- css - 我想知道如何在我的 login.html 中应用 css
- javascript - 拼接功能反向工作,无法正常工作
- java - 即使 KafkaProdccer 由于某种原因无法连接到 kafka,Java KafkaProducer 是否会打开任何套接字和管道?
- ios - UIPageViewController 中导航栏的更改无法正常工作
- php - Laravel 5.7 CORB 被阻止的问题
- user-interface - 如何在 Windows 的松弛应用程序中复制工作区 URL?
- php - PHP 内部操作码缓存