I'll look into the connection_engine API then. Thanks for the reply!
On Thu, Mar 17, 2016 at 9:15 PM, Alan Conway <acon...@redhat.com> wrote:
> On Thu, 2016-03-17 at 20:02 +0100, Mark Banner wrote:
> > Hi,
> > I am creating an application which is using the C++ API for AMQP
> > (0.12) and
> > I am trying to wrap my head around how to create a sender when I have
> > a new
> > message to send.
> > For receiving messages, I can create a receiver when the container is
> > finished initializing and on_message will be called whenever a new
> > message
> > is received. However, for sending messages, if I create a sender when
> > the
> > reactor initializes, on_sendable will be called when it is not
> > needed. From
> > what I understand in the examples, the a sender should be closed when
> > all
> > the client's messages have been sent.
> > How should I go about telling the container I want to send a message?
> > Is it
> > safe to pass the connection which is set up in on_start outside of
> > the
> > container and to create a new sender in another thread?
> > Any help would be much appreciated,
> > Mark
> The container is not thread safe, and it is not safe to use any
> container-owned proton objects outside the thread that calls
> container::run(). Presently there is no way to stop it running. This is
> a very serious limitation.
> There is a plan to add "application event injection" which would allow
> you to inject custom actions from arbitrary threads and have them
> executed safely in the container::run() thread. I expect that to
> materialize soon.
> There is also an alternative to the container: the connection_engine.
> It gives you full control over how IO and threads interact with proton.
> Right now it is raw but usable (see the cpp/engine examples.) It is my
> top priority to make this easy to use for all the common multi-threaded
> use cases. I would be happy to help you use it and to be guided by your
> use cases in developing it for the future.