Add MessageBuilder and use it on producer classes

This commit is contained in:
Matias Fontanini
2017-04-15 16:46:37 -07:00
parent c8154ac6cb
commit e26d7e7db2
10 changed files with 224 additions and 127 deletions

View File

@@ -62,23 +62,14 @@ Producer::PayloadPolicy Producer::get_payload_policy() const {
return message_payload_policy_;
}
void Producer::produce(const Topic& topic, const Partition& partition, const Buffer& payload) {
produce(topic, partition, Buffer{} /*key*/, payload, nullptr /*user_data*/);
}
void Producer::produce(const Topic& topic, const Partition& partition, const Buffer& key,
const Buffer& payload) {
produce(topic, partition, key, payload, nullptr /*user_data*/);
}
void Producer::produce(const Topic& topic, const Partition& partition, const Buffer& key,
const Buffer& payload, void* user_data) {
void* payload_ptr = (void*)payload.get_data();
void* key_ptr = (void*)key.get_data();
void Producer::produce(const MessageBuilder& builder) {
void* payload_ptr = (void*)builder.payload().get_data();
void* key_ptr = (void*)builder.key().get_data();
const int policy = static_cast<int>(message_payload_policy_);
int result = rd_kafka_produce(topic.get_handle(), partition.get_partition(),
policy, payload_ptr, payload.get_size(),
key_ptr, key.get_size(), user_data);
int result = rd_kafka_produce(builder.topic().get_handle(),
builder.partition().get_partition(),
policy, payload_ptr, builder.payload().get_size(),
key_ptr, builder.key().get_size(), builder.user_data());
if (result == -1) {
throw HandleException(rd_kafka_errno2err(errno));
}