Подписка Netflix DGS не вызывается после мутации

Я слежу за документами по подписке DGS вместе с по документамиподписке Apollo, чтобы сделать простой пример подписок в приложении React. Я тоже этим пользовался .

Веб-сокет и серверная часть могут нормально подключаться - я могу запрашивать данные, а также вызывать мутацию (используя GraphiQL). В самый первый раз, когда мутация вызывается, она проходит, данные сохраняются, возвращаются и отображаются в пользовательском интерфейсе, как и ожидалось. В любое время после этого при вызове мутации подписка не работает. Вызов мутации выполнен успешно, данные сохраняются и все такое, но никакие данные не возвращаются в пользовательский интерфейс. Я проверил консоль / сеть браузера - ничего (правда, первый вызов вижу).

Вот мой сборщик данных

      @DgsQuery(field = "helloWorld")
public List<HelloWorldEntity> getHelloWorld() {
    return helloWorldService.findAll();
}

@DgsMutation
public HelloWorldEntity addHelloWorld(@InputArgument AddHelloWorld addHelloWorld) {
    return helloWorldService.save(addHelloWorld);
}

@DgsSubscription
public Publisher<HelloWorldEntity> helloWorldAdded() {
    return helloWorldService.getHelloWorldPublisher();
}

Обслуживание:

       @Autowired
private HelloWorldRepository helloWorldRepository;

private FluxSink<HelloWorldEntity> helloWorldStream;
private ConnectableFlux<HelloWorldEntity> helloWorldPublisher;

@PostConstruct
private void serviceConfig() {
    Flux<HelloWorldEntity> publisher = Flux.create(emitter -> {
        helloWorldStream = emitter;
    });

    helloWorldPublisher = publisher.publish();
    helloWorldPublisher.connect();
}

@Override
public List<HelloWorldEntity> findAll() {
   return helloWorldRepository.findAll();
}

@Override
public HelloWorldEntity save(AddHelloWorld addHelloWorld) {
    HelloWorldEntity hwe = new HelloWorldEntity(addHelloWorld.getHello(), addHelloWorld.getWorld());
    helloWorldRepository.save(hwe);

    helloWorldStream.next(hwe);
    return hwe;
}

@Override
public Publisher<HelloWorldEntity> getHelloWorldPublisher() {
    return helloWorldPublisher;
}

и компонент реакции

      const {loading, error, data: getHelloWorld } = useQuery(HELLO_WORLD);

const [listItems, setListItems] = useState<Array<any>>([]);

useEffect(() => {

  if(undefined !=  getHelloWorld) {
    setListItems(getHelloWorld.helloWorld);
  }
  
}, [getHelloWorld])

const LatestHelloWorld : React.FC = () => {
      const {error,  data, loading } = useSubscription(
    HELLO_WORLD_SUBSCRIPTION
  );
  if(undefined != data) {
    return <HellowWorldListItem id={data.helloWorldAdded.id} hello={data.helloWorldAdded.hello} world={data.helloWorldAdded.world}/>;
  } else {
    return <div/>
  }
}

let items = listItems.map((item) => (<HellowWorldListItem id={item.id} hello={item.hello} world={item.world}/>));

    return (
        <div>
          Hello Responsive World
          <div>
            {items}
          </div>
          <LatestHelloWorld />
        </div>
    )

0 ответов

Другие вопросы по тегам