问题描述
我希望能够根据对象 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 的订阅者。