मेरे पास 2 स्टॉर्म बोल्ट हैं जो अलग-अलग मानों का उत्सर्जन करते हैं (डिक्लेअरऑउटपुटफिल्ड्स के रूप में परिभाषित)

1)

    declarer.declare(new Fields("id", "bool"));
    basicOutputCollector.emit(new Values(id, true));
    declarer.declare(new Fields("id", "string"));
    basicOutputCollector.emit(new Values(id, "somestring"));

और मैं एक बोल्ट रखना चाहता हूं जो लॉगर के रूप में कार्य करता है, जो बूलियन मान आने पर या स्ट्रिंग मान आने पर कुछ लॉग करता है।

(सरलीकृत) टोपोलॉजी इस तरह दिखती है:

    var topologyBuilder = new TopologyBuilder();
    topologyBuilder.setSpout("spout")
    topologyBuilder.setBolt(BoolBolt, new BoolBolt()).fieldsGrouping("spout", new Fields("id"));
    topologyBuilder.setBolt(StringBolt, new StringBolt()).fieldsGrouping("spout", new Fields("id"));
    topologyBuilder.setBolt("LoggerBolt", new LoggerBolt())
            .fieldsGrouping("BoolBolt", new Fields("id"));
            .fieldsGrouping("StringBolt", new Fields("id"));
    return topologyBuilder.createTopology();

लेकिन अगर मैं अब लॉगरबॉल्ट में फ़ील्ड तक पहुंचने का प्रयास करता हूं, तो कभी-कभी, मान एक बूलियन होता है, और कभी-कभी मान एक स्ट्रिंग होता है क्योंकि बूलबोल्ट और स्ट्रिंगबॉल्ट दोनों टुपल्स को लॉगरबॉल्ट में उत्सर्जित करते हैं।

मैं इसे कैसे संभाल सकता हूं?

उदा. अगर टुपल ("आईडी", "बूल") लॉगरबॉल्ट पर आता है तो मैं "बूल" प्रिंट करना चाहता हूं और अगर टुपल ("आईडी", "स्ट्रिंग") लॉगर पर आता है तो मैं "STRING" प्रिंट करना चाहता हूं।

क्या बोल्ड ए टुपल उत्सर्जित होने से जांच करने की कोई संभावना है? या क्या मैं कुछ भी जांच सकता हूं कि टुपल में कौन से फ़ील्ड हैं?

और सिर्फ यह जांच रहा है कि टुपल्स वैल्यू एक स्ट्रिंग है या नहीं, जो मैं ढूंढ रहा हूं, उदाहरण के लिए सबकुछ उत्सर्जित किया जा सकता है !!!

अग्रिम में धन्यवाद

1
DigitalJedi 10 पद 2020, 15:15

1 उत्तर

सबसे बढ़िया उत्तर

आप यह पता लगाने के लिए टपल ऑब्जेक्ट की जांच कर सकते हैं कि यह किस घटक से आया है। अपने LoggerBolt में निम्नलिखित का प्रयास करें:

String from_bolt = tuple.getSourceComponent();
if ("BoolBolt".equals(from_bolt)) {
    LOG.info("BOOL");
} else if ("StringBolt".equals(from_bolt)) {
    LOG.info("STRING");
}

एक विकल्प यह जांचना है कि क्या टपल में एक निश्चित क्षेत्र है, यह tuple.contains("field_name") के साथ किया जाता है। दोनों तरीके काम करेंगे।

1
Tyreal 10 पद 2020, 16:01