include/pulsar/MessageBuilder.h (42 lines of code) (raw):

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