如何根据某个对象的 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 的订阅者。