如何解决如何根据某个对象的 id 过滤订阅事件?
我希望能够根据对象 ID 过滤某些操作的订阅。例如我想做这样的事情:
subscription{
onTaskCompleted(taskId: "1"){
taskCompleted{
status
items{
reason
iD
}
}
taskFailed{
status
details{
detail
status
}
}
}
}
只有当 id 为“1”的任务完成时才会发出事件。
是否有使用某种类型的过滤对 HotChocolate
执行此操作的内置方法?
或
我是否必须自己添加这种类型的过滤,方法是在解析器中执行以下操作:
if(_taskIds.Contains(taskId))
{
TaskCompletedExecution taskFinished = new TaskCompletedExecution(taskCompleted);
await eventSender.SendAsync(nameof(TaskListSubscriptions.OnTaskCompleted),taskFinished,cancellationToken);
}
谢谢
解决方法
你可以这样做:
[SubscribeAndResolve]
public async IAsyncEnumerable<TaskCompletedExecution> OnTaskCompletedAsync(
string taskId,[Service] ITopicEventReceiver eventReceiver,CancellationToken cancellationToken)
{
var stream = await eventReceiver.SubscribeAsync<string,TaskCompletedExecution>(
$"on-task-completed-{taskId}",cancellationToken);
await foreach (var data in stream.ReadEventsAsync().WithCancellation(cancellationToken))
{
yield return data;
}
}
要触发它,您可以将它们发布到 on-task-completed-123
,然后才会将其发送给提供 123
作为 taskId 的订阅者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。