Hi, it worked this way: === char* payload = new char[1024]; Message msg = MessageBuilder() .setAllocatedContent(payload, 1024) .build(); producer.sendAsync(msg, [p = payload](Result res, const MessageId& messageId) { if (res == ResultOk) { // message was published correctly } else { // publish error } delete[] p; }); ===
Thank you for the suggestion Il giorno gio 6 mag 2021 alle ore 22:14 Matteo Merli <mme...@apache.org> ha scritto: > Hi, > > the custom deallocator is actually an interesting idea, though the > general pattern to deallocate the memory is something like: > > === > > char* payload = new char[1024]; > Message msg = MessageBuilder() > .setAllocatedContent(payload, sizeof(payload)) > .build(); > producer.sendAsync(msg, [&](Result res, const MessageId& messageId) { > if (res == ResultOk) { > // message was published correctly > } else { > // publish error > } > delete[] payload; > }); > === > > Does that work for you? > > > -- > Matteo Merli > <mme...@apache.org> > > > On Thu, May 6, 2021 at 5:48 AM Marco Guest <marcogues...@gmail.com> wrote: > > > > Hi, > > I am implementing a message exchange between C++ applications using > Pulsar technology. > > To improve performances I would like to avoid copying my application > data when creating a new Pulsar::Message. > > For this reason I would like to use > pulsar::MessageBuilder::setAllocatedContent(). > > However I’m in trouble currently because I don’t have a way to specify > to pulsar-client-cpp how to deallocate the buffer provided to > setAllocatedContent(). > > > > Moreover the current documentation is a bit unclear about this aspect: > > “The caller is responsible to ensure the memory buffer is valid until > the message has been persisted (or an error is returned).” > > It’s not clear honestly when the message “has been persisted” in my > opinion given that the underlying PulsarMessageImpl is a refcounted data > structure and so it’s hard to tell when its refcount goes to zero (e.g. > imagine some Pulsar::Message being saved into some data structure for later > use). > > > > Would you accept a patch that expands the arguments of > pulsar::MessageBuilder::setAllocatedContent() by taking a deallocation > function pointer as well? > > > > Thanks, > > Marco > > >