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

Reply via email to