internal/proto/WireFormats.proto (180 lines of code) (raw):
/*
* Copyright (C) 2009-2019 Lightbend Inc. <https://www.lightbend.com>
*/
syntax = "proto2";
option go_package = "./akka";
option optimize_for = SPEED;
import "ContainerFormats.proto";
/******************************************
* Remoting message formats
******************************************/
message AckAndEnvelopeContainer {
optional AcknowledgementInfo ack = 1;
optional RemoteEnvelope envelope = 2;
}
/**
* Defines a remote message.
*/
message RemoteEnvelope {
required ActorRefData recipient = 1;
required SerializedMessage message = 2;
optional ActorRefData sender = 4;
optional fixed64 seq = 5;
}
message AcknowledgementInfo {
required fixed64 cumulativeAck = 1;
repeated fixed64 nacks = 2;
}
/**
* Defines a remote ActorRef that "remembers" and uses its original Actor instance
* on the original node.
*/
message ActorRefData {
required string path = 1;
}
/**
* Defines a message.
*/
message SerializedMessage {
required bytes message = 1;
required int32 serializerId = 2;
optional bytes messageManifest = 3;
}
/**
* Defines akka.remote.DaemonMsgCreate
*/
message DaemonMsgCreateData {
required PropsData props = 1;
required DeployData deploy = 2;
required string path = 3;
required ActorRefData supervisor = 4;
}
/**
* Serialization of akka.actor.Props
*/
message PropsData {
required DeployData deploy = 2;
required string clazz = 3;
repeated bytes args = 4;
// serialized props parameters
// older wire protocol: contains class name for each arg
// newer wire protocol: contains string manifest for each arg
repeated string manifests = 5;
// newer wire protocol: serializer id for each arg
repeated int32 serializerIds = 6;
// additionally a flag per position to indicate if it was
// serialized with manifest or not
repeated bool hasManifest = 7;
}
/**
* Serialization of akka.actor.Deploy
*/
message DeployData {
required string path = 1;
optional bytes config = 2;
optional bytes routerConfig = 3;
optional bytes scope = 4;
optional string dispatcher = 5;
// older wire protocol: hardcoded class used to look up serializer
// newer wire protocol: serializer id and manifest available for each
optional int32 scopeSerializerId = 6;
optional string scopeManifest = 7;
optional int32 configSerializerId = 8;
optional string configManifest = 9;
optional int32 routerConfigSerializerId = 10;
optional string routerConfigManifest = 11;
}
/******************************************
* Akka Protocol message formats
******************************************/
/**
* Message format of Akka Protocol.
* Message contains either a payload or an instruction.
*/
message AkkaProtocolMessage {
optional bytes payload = 1;
optional AkkaControlMessage instruction = 2;
}
/**
* Defines some control messages for the remoting
*/
message AkkaControlMessage {
required CommandType commandType = 1;
optional AkkaHandshakeInfo handshakeInfo = 2;
}
message AkkaHandshakeInfo {
required AddressData origin = 1;
required fixed64 uid = 2;
optional string cookie = 3;
}
/**
* Defines the type of the AkkaControlMessage command type
*/
enum CommandType {
ASSOCIATE = 1;
DISASSOCIATE = 2;
HEARTBEAT = 3;
DISASSOCIATE_SHUTTING_DOWN = 4; // Remote system is going down and will not accepts new connections
DISASSOCIATE_QUARANTINED = 5; // Remote system refused the association since the current system is quarantined
}
/**
* java.util.concurrent.TimeUnit enum
*/
enum TimeUnit {
NANOSECONDS = 1;
MICROSECONDS = 2;
MILLISECONDS = 3;
SECONDS = 4;
MINUTES = 5;
HOURS = 6;
DAYS = 7;
}
message FiniteDuration {
required int64 value = 1;
required TimeUnit unit = 2;
}
message RemoteScope {
required AddressData node = 1;
}
// router configs
message DefaultResizer {
required uint32 lowerBound = 1;
required uint32 upperBound = 2;
required uint32 pressureThreshold = 3;
required double rampupRate = 4;
required double backoffThreshold = 5;
required double backoffRate = 6;
required uint32 messagesPerResize = 7;
}
message FromConfig {
optional Payload resizer = 1;
optional string routerDispatcher = 2;
}
message GenericRoutingPool {
required uint32 nrOfInstances = 1;
optional string routerDispatcher = 2;
required bool usePoolDispatcher = 3;
optional Payload resizer = 4;
}
message ScatterGatherPool {
required GenericRoutingPool generic = 1;
required FiniteDuration within = 2;
}
message TailChoppingPool {
required GenericRoutingPool generic = 1;
required FiniteDuration within = 2;
required FiniteDuration interval = 3;
}
/**
* Defines a remote address.
*/
message AddressData {
required string system = 1;
required string hostname = 2;
required uint32 port = 3;
optional string protocol = 4;
}
message RemoteRouterConfig {
required Payload local = 1;
repeated AddressData nodes = 2;
}