179 lines
5.4 KiB
C
179 lines
5.4 KiB
C
|
|
/**
|
||
|
|
* 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_BUILDER_H
|
||
|
|
#define MESSAGE_BUILDER_H
|
||
|
|
|
||
|
|
#include <pulsar/KeyValue.h>
|
||
|
|
#include <pulsar/Message.h>
|
||
|
|
#include <pulsar/defines.h>
|
||
|
|
|
||
|
|
#include <chrono>
|
||
|
|
#include <string>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
namespace pulsar {
|
||
|
|
class PulsarWrapper;
|
||
|
|
|
||
|
|
class PULSAR_PUBLIC MessageBuilder {
|
||
|
|
public:
|
||
|
|
MessageBuilder();
|
||
|
|
|
||
|
|
typedef std::map<std::string, std::string> StringMap;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Finalize the immutable message
|
||
|
|
*/
|
||
|
|
Message build();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set content of the message. The given data is copied into message.
|
||
|
|
*/
|
||
|
|
MessageBuilder& setContent(const void* data, size_t size);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set the content of the message
|
||
|
|
*
|
||
|
|
* @param data the content of the message.
|
||
|
|
* @see setContent(const void*, size_t)
|
||
|
|
*/
|
||
|
|
MessageBuilder& setContent(const std::string& data);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set the content of the message
|
||
|
|
*
|
||
|
|
* @param data the content of the message. The given data is moved into message.
|
||
|
|
*/
|
||
|
|
MessageBuilder& setContent(std::string&& data);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set the key value content of the message
|
||
|
|
*
|
||
|
|
* @param data the content of the key value.
|
||
|
|
*/
|
||
|
|
MessageBuilder& setContent(const KeyValue& data);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set content of the message to a buffer already allocated by the caller. No copies of
|
||
|
|
* this buffer will be made. The caller is responsible to ensure the memory buffer is
|
||
|
|
* valid until the message has been persisted (or an error is returned).
|
||
|
|
*/
|
||
|
|
MessageBuilder& setAllocatedContent(void* data, size_t size);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Sets a new property on a message.
|
||
|
|
* @param name the name of the property
|
||
|
|
* @param value the associated value
|
||
|
|
*/
|
||
|
|
MessageBuilder& setProperty(const std::string& name, const std::string& value);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Add all the properties in the provided map
|
||
|
|
*/
|
||
|
|
MessageBuilder& setProperties(const StringMap& properties);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* set partition key for message routing and topic compaction
|
||
|
|
* @param hash of this key is used to determine message's topic partition
|
||
|
|
*/
|
||
|
|
MessageBuilder& setPartitionKey(const std::string& partitionKey);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* set ordering key used for key_shared subscriptions
|
||
|
|
* @param the ordering key for the message
|
||
|
|
*/
|
||
|
|
MessageBuilder& setOrderingKey(const std::string& orderingKey);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Specify a delay for the delivery of the messages.
|
||
|
|
*
|
||
|
|
* @param delay the delay in milliseconds
|
||
|
|
*/
|
||
|
|
MessageBuilder& setDeliverAfter(const std::chrono::milliseconds delay);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Specify the this message should not be delivered earlier than the
|
||
|
|
* specified timestamp.
|
||
|
|
*
|
||
|
|
* @param deliveryTimestamp UTC based timestamp in milliseconds
|
||
|
|
*/
|
||
|
|
MessageBuilder& setDeliverAt(uint64_t deliveryTimestamp);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Set the event timestamp for the message.
|
||
|
|
*/
|
||
|
|
MessageBuilder& setEventTimestamp(uint64_t eventTimestamp);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Specify a custom sequence id for the message being published.
|
||
|
|
* <p>
|
||
|
|
* The sequence id can be used for deduplication purposes and it needs to follow these rules:
|
||
|
|
* <ol>
|
||
|
|
* <li><code>sequenceId >= 0</code>
|
||
|
|
* <li>Sequence id for a message needs to be greater than sequence id for earlier messages:
|
||
|
|
* <code>sequenceId(N+1) > sequenceId(N)</code>
|
||
|
|
* <li>It's not necessary for sequence ids to be consecutive. There can be holes between
|
||
|
|
* messages. Eg. the <code>sequenceId</code> could represent an offset or a cumulative size.
|
||
|
|
* </ol>
|
||
|
|
*
|
||
|
|
* @param sequenceId
|
||
|
|
* the sequence id to assign to the current message
|
||
|
|
* @since 1.20.0
|
||
|
|
*/
|
||
|
|
MessageBuilder& setSequenceId(int64_t sequenceId);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* override namespace replication clusters. note that it is the
|
||
|
|
* caller's responsibility to provide valid cluster names, and that
|
||
|
|
* all clusters have been previously configured as topics.
|
||
|
|
*
|
||
|
|
* given an empty list, the message will replicate per the namespace
|
||
|
|
* configuration.
|
||
|
|
*
|
||
|
|
* @param clusters where to send this message.
|
||
|
|
*/
|
||
|
|
MessageBuilder& setReplicationClusters(const std::vector<std::string>& clusters);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Do not replicate this message
|
||
|
|
* @param flag if true, disable replication, otherwise use default
|
||
|
|
* replication
|
||
|
|
*/
|
||
|
|
MessageBuilder& disableReplication(bool flag);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* create a empty message, with no properties or data
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
MessageBuilder& create();
|
||
|
|
|
||
|
|
protected:
|
||
|
|
const char* data() const;
|
||
|
|
std::size_t size() const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
void checkMetadata();
|
||
|
|
static std::shared_ptr<MessageImpl> createMessageImpl();
|
||
|
|
Message::MessageImplPtr impl_;
|
||
|
|
|
||
|
|
friend class PulsarWrapper;
|
||
|
|
};
|
||
|
|
} // namespace pulsar
|
||
|
|
|
||
|
|
#endif
|