// Copyright 2016 Apcera Inc. All rights reserved. // // Uses https://github.com/gogo/protobuf // compiled via `protoc -I=. -I=$GOPATH/src --gogofaster_out=. protocol.proto` syntax = "proto3"; package pb; import "github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; // How messages are delivered to the STAN cluster message PubMsg { string clientID = 1; // ClientID string guid = 2; // guid string subject = 3; // subject string reply = 4; // optional reply bytes data = 5; // payload bytes sha256 = 10; // optional sha256 of data } // Used to ACK to publishers message PubAck { string guid = 1; // guid string error = 2; // err string, empty/omitted if no error } // Msg struct. Sequence is assigned for global ordering by // the cluster after the publisher has been acknowledged. message MsgProto { uint64 sequence = 1; // globally ordered sequence number for the subject's channel string subject = 2; // subject string reply = 3; // optional reply bytes data = 4; // payload int64 timestamp = 5; // received timestamp bool redelivered = 6; // Flag specifying if the message is being redelivered uint32 CRC32 = 10; // optional IEEE CRC32 } // Ack will deliver an ack for a delivered msg. message Ack { string subject = 1; // Subject uint64 sequence = 2; // Sequence to acknowledge } // Connection Request message ConnectRequest { string clientID = 1; // Client name/identifier. string heartbeatInbox = 2; // Inbox for server initiated heartbeats. } // Response to a client connect message ConnectResponse { string pubPrefix = 1; // Prefix to use when publishing to this STAN cluster string subRequests = 2; // Subject to use for subscription requests string unsubRequests = 3; // Subject to use for unsubscribe requests string closeRequests = 4; // Subject for closing the stan connection string error = 5; // err string, empty/omitted if no error string subCloseRequests = 6; // Subject to use for subscription close requests string publicKey = 100; // Possibly used to sign acks, etc. } // Enum for start position type. enum StartPosition { NewOnly = 0; LastReceived = 1; TimeDeltaStart = 2; SequenceStart = 3; First = 4; } // Protocol for a client to subscribe message SubscriptionRequest { string clientID = 1; // ClientID string subject = 2; // Formal subject to subscribe to, e.g. foo.bar string qGroup = 3; // Optional queue group string inbox = 4; // Inbox subject to deliver messages on int32 maxInFlight = 5; // Maximum inflight messages without an ack allowed int32 ackWaitInSecs = 6; // Timeout for receiving an ack from the client string durableName = 7; // Optional durable name which survives client restarts StartPosition startPosition = 10; // Start position uint64 startSequence = 11; // Optional start sequence number int64 startTimeDelta = 12; // Optional start time } // Response for SubscriptionRequest and UnsubscribeRequests message SubscriptionResponse { string ackInbox = 2; // ackInbox for sending acks string error = 3; // err string, empty/omitted if no error } // Protocol for a clients to unsubscribe. Will return a SubscriptionResponse message UnsubscribeRequest { string clientID = 1; // ClientID string subject = 2; // subject for the subscription string inbox = 3; // Inbox subject to identify subscription string durableName = 4; // Optional durable name which survives client restarts } // Protocol for a client to close a connection message CloseRequest { string clientID = 1; // Client name provided to Connect() requests } // Response for CloseRequest message CloseResponse { string error = 1; // err string, empty/omitted if no error }