@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.id.RuleChainId ;
import org.thingsboard.server.common.data.id.RuleNodeId ;
import org.thingsboard.server.common.msg.gen.MsgProtos ;
import org.thingsboard.server.common.msg.queue.ServiceQueue ;
import org.thingsboard.server.common.msg.queue.TbMsgCallback ;
import java.io.IOException ;
@ -39,6 +40,7 @@ import java.util.UUID;
@Slf4j
public final class TbMsg implements Serializable {
private final String queueName ;
private final UUID id ;
private final long ts ;
private final String type ;
@ -51,39 +53,44 @@ public final class TbMsg implements Serializable {
//This field is not serialized because we use queues and there is no need to do it
transient private final TbMsgCallback callback ;
public static TbMsg newMsg ( String queueName , String type , EntityId originator , TbMsgMetaData metaData , String data , RuleChainId ruleChainId , RuleNodeId ruleNodeId ) {
return new TbMsg ( queueName , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , ruleChainId , ruleNodeId , TbMsgCallback . EMPTY ) ;
}
public static TbMsg newMsg ( String type , EntityId originator , TbMsgMetaData metaData , String data ) {
return new TbMsg ( UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , null , null , TbMsgCallback . EMPTY ) ;
return new TbMsg ( ServiceQueue . MAIN , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , null , null , TbMsgCallback . EMPTY ) ;
}
public static TbMsg newMsg ( String type , EntityId originator , TbMsgMetaData metaData , String data , RuleChainId ruleChainId , RuleNodeId ruleNodeId ) {
return new TbMsg ( UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , ruleChainId , ruleNodeId , TbMsgCallback . EMPTY ) ;
public static TbMsg newMsg ( String queueName , String type , EntityId originator , TbMsgMetaData metaData , String data ) {
return new TbMsg ( queueName , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , null , null , TbMsgCallback . EMPTY ) ;
}
public static TbMsg newMsg ( String type , EntityId originator , TbMsgMetaData metaData , TbMsgDataType dataType , String data ) {
return new TbMsg ( UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , dataType , data , null , null , TbMsgCallback . EMPTY ) ;
return new TbMsg ( ServiceQueue . MAIN , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , dataType , data , null , null , TbMsgCallback . EMPTY ) ;
}
public static TbMsg newMsg ( String type , EntityId originator , TbMsgMetaData metaData , TbMsgDataType dataType , String data , RuleChainId ruleChainId , RuleNodeId ruleNodeId ) {
return new TbMsg ( UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , dataType , data , ruleChainId , ruleNodeId , TbMsgCallback . EMPTY ) ;
return new TbMsg ( ServiceQueue . MAIN , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , dataType , data , ruleChainId , ruleNodeId , TbMsgCallback . EMPTY ) ;
}
public static TbMsg newMsg ( String type , EntityId originator , TbMsgMetaData metaData , String data , TbMsgCallback callback ) {
return new TbMsg ( UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , null , null , callback ) ;
return new TbMsg ( ServiceQueue . MAIN , UUID . randomUUID ( ) , System . currentTimeMillis ( ) , type , originator , metaData . copy ( ) , TbMsgDataType . JSON , data , null , null , callback ) ;
}
public static TbMsg transformMsg ( TbMsg origMsg , String type , EntityId originator , TbMsgMetaData metaData , String data ) {
return new TbMsg ( origMsg . getId ( ) , origMsg . getTs ( ) , type , originator , metaData . copy ( ) , origMsg . getDataType ( ) ,
return new TbMsg ( origMsg . getQueueName ( ) , origMsg . get Id ( ) , origMsg . getTs ( ) , type , originator , metaData . copy ( ) , origMsg . getDataType ( ) ,
data , origMsg . getRuleChainId ( ) , origMsg . getRuleNodeId ( ) , origMsg . getCallback ( ) ) ;
}
public static TbMsg newMsg ( TbMsg tbMsg , RuleChainId ruleChainId , RuleNodeId ruleNodeId ) {
return new TbMsg ( UUID . randomUUID ( ) , tbMsg . getTs ( ) , tbMsg . getType ( ) , tbMsg . getOriginator ( ) , tbMsg . getMetaData ( ) . copy ( ) ,
return new TbMsg ( tbMsg . getQueueName ( ) , UUID . randomUUID ( ) , tbMsg . getTs ( ) , tbMsg . getType ( ) , tbMsg . getOriginator ( ) , tbMsg . getMetaData ( ) . copy ( ) ,
tbMsg . getDataType ( ) , tbMsg . getData ( ) , ruleChainId , ruleNodeId , TbMsgCallback . EMPTY ) ;
}
private TbMsg ( UUID id , long ts , String type , EntityId originator , TbMsgMetaData metaData , TbMsgDataType dataType , String data ,
private TbMsg ( String queueName , UUID id , long ts , String type , EntityId originator , TbMsgMetaData metaData , TbMsgDataType dataType , String data ,
RuleChainId ruleChainId , RuleNodeId ruleNodeId , TbMsgCallback callback ) {
this . id = id ;
this . queueName = queueName ;
if ( ts > 0 ) {
this . ts = ts ;
} else {
@ -136,7 +143,7 @@ public final class TbMsg implements Serializable {
return builder . build ( ) . toByteArray ( ) ;
}
public static TbMsg fromBytes ( byte [ ] data , TbMsgCallback callback ) {
public static TbMsg fromBytes ( String queueName , byte [ ] data , TbMsgCallback callback ) {
try {
MsgProtos . TbMsgProto proto = MsgProtos . TbMsgProto . parseFrom ( data ) ;
TbMsgMetaData metaData = new TbMsgMetaData ( proto . getMetaData ( ) . getDataMap ( ) ) ;
@ -150,18 +157,18 @@ public final class TbMsg implements Serializable {
ruleNodeId = new RuleNodeId ( new UUID ( proto . getRuleNodeIdMSB ( ) , proto . getRuleNodeIdLSB ( ) ) ) ;
}
TbMsgDataType dataType = TbMsgDataType . values ( ) [ proto . getDataType ( ) ] ;
return new TbMsg ( UUID . fromString ( proto . getId ( ) ) , proto . getTs ( ) , proto . getType ( ) , entityId , metaData , dataType , proto . getData ( ) , ruleChainId , ruleNodeId , callback ) ;
return new TbMsg ( queueName , UUID . fromString ( proto . getId ( ) ) , proto . getTs ( ) , proto . getType ( ) , entityId , metaData , dataType , proto . getData ( ) , ruleChainId , ruleNodeId , callback ) ;
} catch ( InvalidProtocolBufferException e ) {
throw new IllegalStateException ( "Could not parse protobuf for TbMsg" , e ) ;
}
}
public TbMsg copyWithRuleChainId ( RuleChainId ruleChainId ) {
return new TbMsg ( this . id , this . ts , this . type , this . originator , this . metaData , this . dataType , this . data , ruleChainId , null , callback ) ;
return new TbMsg ( this . queueName , this . id , this . ts , this . type , this . originator , this . metaData , this . dataType , this . data , ruleChainId , null , callback ) ;
}
public TbMsg copyWithRuleNodeId ( RuleChainId ruleChainId , RuleNodeId ruleNodeId ) {
return new TbMsg ( this . id , this . ts , this . type , this . originator , this . metaData , this . dataType , this . data , ruleChainId , ruleNodeId , callback ) ;
return new TbMsg ( this . queueName , this . id , this . ts , this . type , this . originator , this . metaData , this . dataType , this . data , ruleChainId , ruleNodeId , callback ) ;
}
public TbMsgCallback getCallback ( ) {
@ -172,4 +179,8 @@ public final class TbMsg implements Serializable {
return TbMsgCallback . EMPTY ;
}
}
public String getQueueName ( ) {
return queueName ! = null ? queueName : ServiceQueue . MAIN ;
}
}