В функции declareOutputFields
моего болта (который расширяет BaseBasicBolt) есть простой способ объявить те же поля, которые я получил от предыдущего болта или желоба?Пропустить выходные поля через болт Apache Storm
ответ
№ Это невозможно.
Резервуары и болты в основном полностью развязаны и соединены только при сборке топологии. Таким образом, каждый Spout/Bolt должен независимо от своего входа определять схему вывода.
Я нашел интересный способ справиться с этой проблемой. Обратите внимание, что это решение на самом деле не соответствует моему вопросу, потому что то, что я хотел сделать, не очень удобно для правил руководства Storm, как объяснил Маттиас Сакс.
Что я, наконец, делаю, я спрашиваю поля в конструкторе моего болта. Таким образом, поля, которые я хочу пройти через мой болт, приведены в моей топологии. Это позволяет пользователю болта иметь больший контроль над тем, что входит и выходит за болт.
Я думаю, что это более уместно, чем пытаться передать все, как зеркало.
Вне темы: вы говорите, жирный, независимы, но разве вы не кодируете весь ваш болт в зависимости от ввода, который вы планируете дать в топологии? – matthiasbe
Да. Болт имеет требования к полям ввода, которые он читает. Но все поля, которые он не обрабатывает, вы можете делать все, что хотите - вы также можете добавить новое поле. Это особенно верно, если вы используете имена полей вместо этого в индексе для их чтения. –
Ок танков для информации :) – matthiasbe