Как я могу заблокировать записи в конвейер для реконфигурации конвейера? - PullRequest
0 голосов
/ 01 марта 2012

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

Я подумал о том, чтобы сохранить ссылку на декодер, общий для всех конвейеров, и перенастроить ее извне, если необходимо. Я беспокоюсь о параллелизме в этом случае.

  • как я могу убедиться, что конвейер не обрабатывает записи я работаю над декодером?
  • и как быть уверенным, что уведомление обрабатывается первое сообщение после реконфигурации?

единственный другой способ, который я вижу, - это отправить объект «уведомления» через конвейер (используя channel.write), перехватить объект в декодере и затем выполнить повторную настройку при пересылке сообщения уведомления. В этом случае в конвейере не должно быть параллелизма.

  • это был бы лучший / современный способ сделать это?

1 Ответ

0 голосов
/ 02 марта 2012

Я решил использовать второй способ.StateHandler перехватывает ConfigurationEvents, перенастраивает конвейер.К сожалению, это означает, что я не могу быть уверен, что все каналы используют одинаковую конфигурацию, потому что могут возникнуть условия гонки между реконфигурацией и чрезвычайно молодыми каналами.но я уверен, что в моем случае это не будет иметь значения.

...