Bagaimana Apache Storm membuat implementasi bautnya

Setelah menerapkan topologi apache storm yang sangat sederhana di java saya menemukan NPE yang menyebabkan kebingungan.

Ini pada dasarnya adalah metode utama saya:

TologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new CustomSpout(true), 4);
final CustomBolt bolt = new CustomBolt();
builder.setBolt("bolt", bolt, 1).shuffleGrouping("spout");

LocalCluster cluster = new LocalCluster();
Map conf = new HashMap();
conf.put(Config.TOPOLOGY_WORKERS, 10);
cluster.submitTopology("test", conf, createTopology());

CustomBolt memperluas kelas AbstractBasic dan mengimplementasikan IRichBolt. Mereka memiliki bidang berikut:

abstract class AbstractBasic {
    A a;
    B b;
} 

CustomBolt extends AbstractBasic implements IRichBolt {
    A anotherA;
    C c;
    CustomBolt() {
        this.anotherA = new A(true);
        this.a = new A(false);
        this.b = new B();
        this.c = new C();
    }
}

Pada metode execute dari CustomBolt akan ada beberapa penyisipan ke semua kelas. Namun, bidang yang diwarisi dari AbstractBasic tidak dipakai, tetapi bidang lainnya, yang langsung ada di CustomBolt, adalah...

Adakah yang tahu bagaimana baut dibuat dan bagaimana mungkin beberapa bidang diinisialisasi dan ada pula yang tidak.


person user3354890    schedule 07.07.2014    source sumber


Jawaban (2)


Saat baut dikirimkan ke topologi, baut tersebut diserialkan dan dikirim ke masing-masing topologi pekerja di mana mereka dideserialisasi. Karena AbstractBasic tidak mengimplementasikan Serializable, bidangnya tidak akan diserialkan ketika CustomBolt diserialkan.

Dengan contoh yang Anda berikan, Anda seharusnya dapat memperbaiki masalah Anda dengan menyatakan bahwa AbstractBasic mengimplementasikan Serializable:

abstract class AbstractBasic implements Serializable ...
person Carl Veazey    schedule 10.07.2014

Saya tidak yakin bagaimana instantiasi bekerja dengan Bolts tetapi saya dapat menemukan alasan yang bagus. Menurut pemahaman saya, kami menjalankan topologi di lingkungan terdistribusi dan untuk menghindari modifikasi bersamaan pada variabel bersama (yaitu variabel tingkat kelas yang diwarisi dari kelas induk), variabel induk dapat disetel ke nol di kelas anak.

person java_enthu    schedule 08.07.2014