Если вы публикуете и отключаетесь от параллельных потоков, существует вероятность того, что отключение настигнет publi sh.
В общем, эта проблема должна быть решена на уровне приложения, т.е. приложение, которое должно координировать последнюю публикацию sh и отключение.
У вас есть следующие варианты:
Использовать пакетную обработку
Пакетная обработка обеспечивает порядок:
bayeuxClient.batch(() -> {
// Last publish
bayeuxClient.getChannel("/foo").publish("data");
bayeuxClient.disconnect();
// You can wait here.
bayeuxClient.waitFor(10000L, BayeuxClient.State.DISCONNECTED);
});
Используйте MessageListener
Используйте прослушиватель сообщений из publish()
, чтобы вы получали уведомление о том, когда последний sh publi завершен, а затем вы можете отключиться:
// Last publish
bayeuxClient.getChannel("/foo").publish("data", publishReply -> {
// Do not wait inside CometD listeners.
bayeuxClient.disconnect();
});
// Wait outside CometD listeners.
bayeuxClient.waitFor(10000L, BayeuxClient.State.DISCONNECTED);