首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NServiceBus - Aggregate Root - Saga - Synchronous命令

NServiceBus - Aggregate Root - Saga - Synchronous命令
EN

Stack Overflow用户
提问于 2021-04-09 12:55:00
回答 1查看 48关注 0票数 1

将聚合根User建模为NServiceBus Saga

User.cs

代码语言:javascript
复制
public class User {
   ....
   public string Rename(string name) {
     .// some validation logic
   }
   ...
}

UserSagaData.cs

代码语言:javascript
复制
public class UserSagaData : ContainSagaData
{
  public User User { get; set;}
}

UserSaga.cs

代码语言:javascript
复制
public partial class UserSaga : Saga<RenameUser>
{
   ...
   public async Task Handle(RenameUserimportAttendees, IMessageHandlerContext context)
  {
     Data.User.rename(...
  } 
   ...
}

现在,我需要通过REST API接受RenameUser命令,并在HTTP响应中提供反馈,因此不能从Controller.Action向message broker发送RegisterUser。我需要同步执行命令,获取反馈并发送http响应。

首先想到的是使用ISagaPersister,即通过id检索saga,然后调用命令,然后使用ISagaPersister (负责乐观锁定)将saga持久化回数据存储。对此有什么想法吗?

这个问题有没有替代的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 18:47:58

您希望RenameUser命令会产生什么类型的反馈?

您不能只返回一个HTTP OK并将rename命令排入队列吗?(假设您已经在适当的位置验证了新名称,那么出错的可能性应该很小,并且可以脱机处理,如果命令最终出现在错误队列中?)

如果你真的必须等待响应,一个选择是使用我们的回调包https://docs.particular.net/nservicebus/messaging/callbacks,在响应到达之前启用REST API块,这样你仍然可以在幕后使用消息传递。

你认为如何?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67015257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档