将聚合根User建模为NServiceBus Saga
User.cs
public class User {
....
public string Rename(string name) {
.// some validation logic
}
...
}UserSagaData.cs
public class UserSagaData : ContainSagaData
{
public User User { get; set;}
}UserSaga.cs
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持久化回数据存储。对此有什么想法吗?
这个问题有没有替代的解决方案?
发布于 2021-04-12 18:47:58
您希望RenameUser命令会产生什么类型的反馈?
您不能只返回一个HTTP OK并将rename命令排入队列吗?(假设您已经在适当的位置验证了新名称,那么出错的可能性应该很小,并且可以脱机处理,如果命令最终出现在错误队列中?)
如果你真的必须等待响应,一个选择是使用我们的回调包https://docs.particular.net/nservicebus/messaging/callbacks,在响应到达之前启用REST API块,这样你仍然可以在幕后使用消息传递。
你认为如何?
https://stackoverflow.com/questions/67015257
复制相似问题