forked from apache/pulsar-client-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMessageId.h
More file actions
130 lines (109 loc) · 3.91 KB
/
Copy pathMessageId.h
File metadata and controls
130 lines (109 loc) · 3.91 KB
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
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
#ifndef MESSAGE_ID_H
#define MESSAGE_ID_H
#include <pulsar/defines.h>
#include <stdint.h>
#include <iosfwd>
#include <memory>
#include <string>
#include <vector>
namespace pulsar {
class MessageIdImpl;
class PULSAR_PUBLIC MessageId {
public:
MessageId& operator=(const MessageId&);
MessageId();
/**
* @deprecated
*
* Construct the MessageId
*
* NOTE: This API still exists for backward compatibility, use MessageIdBuilder instead.
*
* @param partition the partition number of a topic
* @param ledgerId the ledger id
* @param entryId the entry id
* @param batchIndex the batch index of a single message in a batch
*/
explicit MessageId(int32_t partition, int64_t ledgerId, int64_t entryId, int32_t batchIndex);
/**
* MessageId representing the "earliest" or "oldest available" message stored in the topic
*/
static const MessageId& earliest();
/**
* MessageId representing the "latest" or "last published" message in the topic
*/
static const MessageId& latest();
/**
* Serialize the message id into a binary string for storing
*/
void serialize(std::string& result) const;
/**
* Get the topic Name from which this message originated from
*
* @return the topic name or an empty string if there is no topic name
*/
const std::string& getTopicName() const;
/**
* Set the topicName
* @deprecated This method will be eventually removed
*/
void setTopicName(const std::string& topicName);
/**
* Deserialize a message id from a binary string
*/
static MessageId deserialize(const std::string& serializedMessageId);
// These functions compare the message order as stored in bookkeeper
bool operator<(const MessageId& other) const;
bool operator<=(const MessageId& other) const;
bool operator>(const MessageId& other) const;
bool operator>=(const MessageId& other) const;
bool operator==(const MessageId& other) const;
bool operator!=(const MessageId& other) const;
int64_t ledgerId() const;
int64_t entryId() const;
int32_t batchIndex() const;
int32_t partition() const;
int32_t batchSize() const;
private:
friend class ConsumerImpl;
friend class ReaderImpl;
friend class Message;
friend class MessageImpl;
friend class Commands;
friend class PartitionedProducerImpl;
friend class MultiTopicsConsumerImpl;
friend class UnAckedMessageTrackerEnabled;
friend class BatchAcknowledgementTracker;
friend struct OpSendMsg;
friend class PulsarWrapper;
friend class PulsarFriend;
friend class NegativeAcksTracker;
friend class MessageIdBuilder;
friend class ChunkMessageIdImpl;
void setTopicName(const std::shared_ptr<std::string>& topic);
friend PULSAR_PUBLIC std::ostream& operator<<(std::ostream& s, const MessageId& messageId);
typedef std::shared_ptr<MessageIdImpl> MessageIdImplPtr;
MessageIdImplPtr impl_;
explicit MessageId(const MessageIdImplPtr& impl);
};
typedef std::vector<MessageId> MessageIdList;
} // namespace pulsar
#endif // MESSAGE_ID_H