Hi Robbie,

Just my feedback.
Effectively, when I use the latest libqpid-proton-cpp release (i.e. 0.37.0), 
it's better, and works fine.

Moreover, on each methods (receive, send, unreceive) I used with my connection 
object the following code (and more especially work_queue().add .....)
So to summary, my issue has been solved by:


  *   Using the latest library
  *   Using each time work_queue().add with my shared connection object.

send(const proton::message& msg) {
......
m_connection.work_queue().add([=]() {
    m_connection.default_session().open_sender("queue://myAdress");
});

}

receive(const std::string& address) {
......
m_connection.work_queue().add([=]() {
   m_connection.default_session().open_receiver(address, 
proton::receiver_options().auto_accept(true));
});

}

unreceive() {
......
m_connection.work_queue().add([=]() {
    m_receiver.close();
});

}

Regards

From: Millieret, Xavier
Sent: mercredi 27 avril 2022 16:37
To: 'users@qpid.apache.org' <users@qpid.apache.org>
Subject: RE: Poor performance with Session in qpid-cpp

Hi Robbie,

Thx a lot for your explanation, I will try with the latest library (0.37.0), 
and I send you my feedback.

From: Millieret, Xavier
Sent: mercredi 27 avril 2022 10:24
To: users@qpid.apache.org<mailto:users@qpid.apache.org>
Subject: Poor performance with Session in qpid-cpp

Hi all,

I am using on linux the qpid-proton cpp 0.34 library, coupled to activemq 5.16 
on Debian 11

I don't understand why the code who using session object (or default_session) 
to send or a receive message, when I try to close it (for example, the 
receiver), it's 2 times more important than using a connection and each time 
open a receiver od sender and close it?

Here the code who take 2 times more for a close

m_connection.work_queue().add([=]() {
     m_connection.default_session().open_receiver("queue://myAdress", 
proton::receiver_options().auto_accept(true));
});

........

// The close session
m_receiver.session().close()

// 2 seconds later
on_session_close(proton::session&)
{
  cout << "inside on_session_close << endl ;
}

// This code is 2 times more faster

m_connection.work_queue().add([=]() {



m_connection.open_receiver(address, 
proton::receiver_options().auto_accept(true));


});

........
m_receiver.close();

// Arounds milli seconds after
on_receiver_close(proton::receiver&)
{
  cout << "inside on_receiver_close << endl ;
}

In the broker 's literature and theirs clients, the best way is obtain a 
connection, use it to open session, and use the session to send or receive 
message, don't open/close  a connection every time who want to send/receive a 
message.

So it's my question about this performance issue.

Xavier Millieret
Software Engineer
Engineering Software & Connectivity
Power Quality and Electronics Division (PQED)
Immeuble Viseo - Bâtiment A
110, rue Blaise Pascal
38330 Montbonnot St Martin
FRANCE
tel: +33 (0) 4 76 00 66 02
xaviermillie...@eaton.com<mailto:xaviermillie...@eaton.com>
www.eaton.com<http://www.eaton.com/>




________________________________
Eaton Industries (France) S.A.S ~ Siège social: 110 Rue Blaise Pascal, Immeuble 
Le Viséo - Bâtiment A Innovallée, 38330, Montbonnot-St.-Martin, France ~ Lieu 
d'enregistrement au registre du commerce: Grenoble ~ Numéro d'enregistrement: 
509 653 176 ~ Capital social souscrit et liberé:EUR 16215441 ~ Numéro de TVA: 
FR47509653176

________________________________


Reply via email to