2017-11-08 3 views
1

Ich versuche, einen Remote-Listener auf Apache zu implementieren, zünden, aber aus irgendeinem Grund scheint die Registrierung fehlschlagen, verwenden Sie den folgenden Code.Ignite Event Listener Registrierungsfehler

IgniteMessaging message = ignite.message(ignite.cluster()); 
message.remoteListen("topic1", new IgniteBiPredicate<UUID, String>() { 

    @Override 
    public boolean apply(UUID e1, String e2) { 
     System.out.println("message received" + e2); 
     return true; 
    } 
    }); 

Aber ich bekomme den folgenden Fehler während der Registrierung.

Exception in thread "main" class org.apache.ignite.spi.IgniteSpiException: Failed to marshal custom event: StartRoutineDiscoveryMessage [startReqData=StartRequestData [prjPred=AlwaysTruePredicate [], clsName=null, depInfo=null, hnd=GridMessageListenHandler [[email protected], clsName=null, depInfo=null, depEnabled=false], bufSize=1, interval=0, autoUnsubscribe=false], keepBinary=false, routineId=13f09f06-4ebe-4cc8-9671-54162472df15] 
 
\t at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendCustomEvent(ServerImpl.java:773) 
 
\t at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.sendCustomEvent(TcpDiscoverySpi.java:453) 
 
\t at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.sendCustomEvent(GridDiscoveryManager.java:2090) 
 
\t at org.apache.ignite.internal.processors.continuous.GridContinuousProcessor.startRoutine(GridContinuousProcessor.java:748) 
 
\t at org.apache.ignite.internal.IgniteMessagingImpl.remoteListen(IgniteMessagingImpl.java:212) 
 
\t at independent.messaging.Receiver.listenForMessages(Receiver.java:71) 
 
\t at independent.messaging.Receiver.main(Receiver.java:55) 
 
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to serialize object: StartRoutineDiscoveryMessage [startReqData=StartRequestData [prjPred=AlwaysTruePredicate [], clsName=null, depInfo=null, hnd=GridMessageListenHandler [[email protected], clsName=null, depInfo=null, depEnabled=false], bufSize=1, interval=0, autoUnsubscribe=false], keepBinary=false, routineId=13f09f06-4ebe-4cc8-9671-54162472df15] 
 
\t at org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:85) 
 
\t at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:70) 
 
\t at org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:99) 
 
\t at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:58) 
 
\t at org.apache.ignite.internal.util.IgniteUtils.marshal(IgniteUtils.java:9815) 
 
\t at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendCustomEvent(ServerImpl.java:769) 
 
\t ... 6 more 
 
Caused by: java.io.NotSerializableException: independent.messaging.Receiver 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 
 
\t at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
 
\t at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
 
\t at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
 
\t at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
 
\t at org.apache.ignite.internal.GridMessageListenHandler.writeExternal(GridMessageListenHandler.java:244) 
 
\t at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1459) 
 
\t at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1430) 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
 
\t at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
 
\t at org.apache.ignite.internal.processors.continuous.StartRequestData.writeExternal(StartRequestData.java:241) 
 
\t at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1459) 
 
\t at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1430) 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
 
\t at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
 
\t at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
 
\t at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
 
\t at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
 
\t at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
 
\t at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
 
\t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
 
\t at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
 
\t at org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:80) 
 
\t ... 11 more

Was die mögliche Ursache für diesen Fehler sein könnte?

Antwort

2

Ihr IgniteBiPredicate wird serialisiert und an die anderen Knoten gesendet. In diesem Fall wird die Klasse also anonymisiert, da diese Klasse anonym ist.

Ich würde empfehlen, private statische Klasse für Prädikat mit dieser Implementierung erstellen und Instanz davon als ein Argument für remoteListen Methode

erstellen