File: protocol.proto

package info (click to toggle)
golang-github-nats-io-go-nats-streaming 0.4.0%2Bgit20181116.19c9df8-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 328 kB
  • sloc: sh: 11; makefile: 4
file content (145 lines) | stat: -rw-r--r-- 5,785 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright 2016-2018 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// 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  connID   = 6;  // Connection ID. For servers that know about this field, clientID can be omitted

  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.
  int32  protocol       = 3;  // Protocol the client is at.
  bytes  connID         = 4;  // Connection ID, a way to uniquely identify a connection (no connection should ever have the same)
  int32  pingInterval   = 5;  // Interval at which client wishes to send PINGs (expressed in seconds).
  int32  pingMaxOut     = 6;  // Maximum number of PINGs without a response after which the connection can be considered lost.
}

// 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 pingRequests     = 7;   // Subject to use for PING requests
  int32  pingInterval     = 8;   // Interval at which client should send PINGs (expressed in seconds).
  int32  pingMaxOut       = 9;   // Maximum number of PINGs without a response after which the connection can be considered lost
  int32  protocol         = 10;  // Protocol version the server is at

  string publicKey     = 100; // Possibly used to sign acks, etc.
}

// PING from client to server
message Ping {
  bytes connID    = 1;  // Connection ID
}

// PING response from the server
message PingResponse {
  string error    = 1;  // Error string, empty/omitted if no error
}

// 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
}