You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by "Clappier, Eric" <Er...@Eaton.com.INVALID> on 2022/08/02 11:31:03 UTC

[qpid-proton-c++] Receiver list not clear

Dear all,

I am writing an amqp client with Qpid proton C++ 0.34 on Debian 10.
I create one client connection which I had some senders and some receivers on it.
For example with a request, I create a sender to send the message and a receiver for the reply message.
When I create a receiver in my default session for a particular address (queue), the receiver appear in the receiver list of the session.
After receive the message, when I close the receiver with "receiver.close()", the receiver is closed but it still present in the default session list.
Its state is closed and none active.
When I receive another message, the list increase indefinitely and was never clear.
Is there a way to prevent the list from growing indefinitely without closing the connection ?

Any help will be appreciate.

Regards

Eric Clappier



________________________________
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

________________________________



RE: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear

Posted by "Clappier, Eric" <Er...@Eaton.com.INVALID>.
You are right, the common usage is to create on address, so one receiver in charge to respond to request.
But in our case, we write an open library, the client can use the library as I want. If I wanted to open a new receiver on each time,
we will have the issue of the number of link object which increased.
Thanks



-----------------------------
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é:€ 16215441 ~ Numéro de TVA: FR47509653176

-----------------------------

-----Original Message-----
From: Robbie Gemmell <ro...@gmail.com> 
Sent: lundi 8 août 2022 14:17
To: users <us...@qpid.apache.org>
Subject: Re: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear

I know next to nothing about the C++ codes so I cant help any more in that regard than I have. I am also confused by your mention of connections this time when you were talking about receivers the prior time.

No, you cant change the address of a receiver once opened, they are created for a specific address. You would need to change your overall operations approach to use the more efficient / typical approach of reusing an address for consuming from (e.g utilising correlation-id's to correlate responses with requests, if this is for request-response) so that you could leave open / reuse the same receiver to consume multiple messages, rather than inefficiently creating lots of new consumers and using a different address for every operation. Or perhaps be receiving from a server that can wildcard its addresses to receive from more than one destination. On the sending side the equivalent more-efficient use case is to use a single 'anonymous sender' over time, created without an address, and have each message carry the specific address it is being sent to...plus perhaps a correlation-id if looking to correlate responses to specific messages.

On Mon, 8 Aug 2022 at 12:19, Clappier, Eric <Er...@eaton.com.invalid> wrote:
>
> Hello Robbie,
> Thanks a lot for your response.
> I see no api to clear link objects with C++ library.
> I don't know how the link objects are managed internally by the 
> library but I made some test with a lot of connection (more than 100000) and wait a little to see that happened. The connections are still present, all closed and not active.
> I don't know how to remove them correctly. Is there a sort of garbage 
> collector to clean the structure after a delay manage by the library...
> Of course, I try  to reuse receiver (or sender) but to change the 
> address for the receiver, there is only the open_receiver (const std::string &addr) api for that.
> So need to re-open a new receiver each time.
> BR
>
>
>
> -----------------------------
> 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é:€ 16215441 ~ Numéro de TVA: FR47509653176
>
> -----------------------------
>
> -----Original Message-----
> From: Robbie Gemmell <ro...@gmail.com>
> Sent: lundi 8 août 2022 11:33
> To: users@qpid.apache.org
> Subject: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear
>
> I believe there is a 'free' method in the C library, to clear out link objects when they are done with (i.e locally and remotely closed). I dont know if the C++ stuff exposes that. If it doesnt it should probably be managing the 'freeing' itself.
>
> Of course, there is a simpler way to avoid a buildup of receivers:
> reuse a single receiver, stop creating and closing one for each request. Naturally that depends on what specifically it is you are doing, but creating receivers (or senders) per message is inefficient and so not generally advisable.
>
> On Tue, 2 Aug 2022 at 12:31, Clappier, Eric <Er...@eaton.com.invalid> wrote:
> >
> > Dear all,
> >
> > I am writing an amqp client with Qpid proton C++ 0.34 on Debian 10.
> > I create one client connection which I had some senders and some receivers on it.
> > For example with a request, I create a sender to send the message and a receiver for the reply message.
> > When I create a receiver in my default session for a particular address (queue), the receiver appear in the receiver list of the session.
> > After receive the message, when I close the receiver with "receiver.close()", the receiver is closed but it still present in the default session list.
> > Its state is closed and none active.
> > When I receive another message, the list increase indefinitely and was never clear.
> > Is there a way to prevent the list from growing indefinitely without closing the connection ?
> >
> > Any help will be appreciate.
> >
> > Regards
> >
> > Eric Clappier
> >
> >
> >
> > ________________________________
> > 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
> >
> > ________________________________
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org For 
> additional commands, e-mail: users-help@qpid.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org For additional commands, e-mail: users-help@qpid.apache.org


Re: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear

Posted by Robbie Gemmell <ro...@gmail.com>.
I know next to nothing about the C++ codes so I cant help any more in
that regard than I have. I am also confused by your mention of
connections this time when you were talking about receivers the prior
time.

No, you cant change the address of a receiver once opened, they are
created for a specific address. You would need to change your overall
operations approach to use the more efficient / typical approach of
reusing an address for consuming from (e.g utilising correlation-id's
to correlate responses with requests, if this is for request-response)
so that you could leave open / reuse the same receiver to consume
multiple messages, rather than inefficiently creating lots of new
consumers and using a different address for every operation. Or
perhaps be receiving from a server that can wildcard its addresses to
receive from more than one destination. On the sending side the
equivalent more-efficient use case is to use a single 'anonymous
sender' over time, created without an address, and have each message
carry the specific address it is being sent to...plus perhaps a
correlation-id if looking to correlate responses to specific messages.

On Mon, 8 Aug 2022 at 12:19, Clappier, Eric
<Er...@eaton.com.invalid> wrote:
>
> Hello Robbie,
> Thanks a lot for your response.
> I see no api to clear link objects with C++ library.
> I don't know how the link objects are managed internally by the library but I made some test with a lot of connection
> (more than 100000) and wait a little to see that happened. The connections are still present, all closed and not active.
> I don't know how to remove them correctly. Is there a sort of garbage collector to clean the structure after a delay
> manage by the library...
> Of course, I try  to reuse receiver (or sender) but to change the address for the receiver, there is only the
> open_receiver (const std::string &addr) api for that.
> So need to re-open a new receiver each time.
> BR
>
>
>
> -----------------------------
> 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é:€ 16215441 ~ Numéro de TVA: FR47509653176
>
> -----------------------------
>
> -----Original Message-----
> From: Robbie Gemmell <ro...@gmail.com>
> Sent: lundi 8 août 2022 11:33
> To: users@qpid.apache.org
> Subject: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear
>
> I believe there is a 'free' method in the C library, to clear out link objects when they are done with (i.e locally and remotely closed). I dont know if the C++ stuff exposes that. If it doesnt it should probably be managing the 'freeing' itself.
>
> Of course, there is a simpler way to avoid a buildup of receivers:
> reuse a single receiver, stop creating and closing one for each request. Naturally that depends on what specifically it is you are doing, but creating receivers (or senders) per message is inefficient and so not generally advisable.
>
> On Tue, 2 Aug 2022 at 12:31, Clappier, Eric <Er...@eaton.com.invalid> wrote:
> >
> > Dear all,
> >
> > I am writing an amqp client with Qpid proton C++ 0.34 on Debian 10.
> > I create one client connection which I had some senders and some receivers on it.
> > For example with a request, I create a sender to send the message and a receiver for the reply message.
> > When I create a receiver in my default session for a particular address (queue), the receiver appear in the receiver list of the session.
> > After receive the message, when I close the receiver with "receiver.close()", the receiver is closed but it still present in the default session list.
> > Its state is closed and none active.
> > When I receive another message, the list increase indefinitely and was never clear.
> > Is there a way to prevent the list from growing indefinitely without closing the connection ?
> >
> > Any help will be appreciate.
> >
> > Regards
> >
> > Eric Clappier
> >
> >
> >
> > ________________________________
> > 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
> >
> > ________________________________
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org For additional commands, e-mail: users-help@qpid.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


RE: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear

Posted by "Clappier, Eric" <Er...@Eaton.com.INVALID>.
Hello Robbie,
Thanks a lot for your response.
I see no api to clear link objects with C++ library.
I don't know how the link objects are managed internally by the library but I made some test with a lot of connection
(more than 100000) and wait a little to see that happened. The connections are still present, all closed and not active.
I don't know how to remove them correctly. Is there a sort of garbage collector to clean the structure after a delay 
manage by the library...
Of course, I try  to reuse receiver (or sender) but to change the address for the receiver, there is only the 
open_receiver (const std::string &addr) api for that.
So need to re-open a new receiver each time.
BR 



-----------------------------
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é:€ 16215441 ~ Numéro de TVA: FR47509653176

-----------------------------

-----Original Message-----
From: Robbie Gemmell <ro...@gmail.com> 
Sent: lundi 8 août 2022 11:33
To: users@qpid.apache.org
Subject: [EXTERNAL] Re: [qpid-proton-c++] Receiver list not clear

I believe there is a 'free' method in the C library, to clear out link objects when they are done with (i.e locally and remotely closed). I dont know if the C++ stuff exposes that. If it doesnt it should probably be managing the 'freeing' itself.

Of course, there is a simpler way to avoid a buildup of receivers:
reuse a single receiver, stop creating and closing one for each request. Naturally that depends on what specifically it is you are doing, but creating receivers (or senders) per message is inefficient and so not generally advisable.

On Tue, 2 Aug 2022 at 12:31, Clappier, Eric <Er...@eaton.com.invalid> wrote:
>
> Dear all,
>
> I am writing an amqp client with Qpid proton C++ 0.34 on Debian 10.
> I create one client connection which I had some senders and some receivers on it.
> For example with a request, I create a sender to send the message and a receiver for the reply message.
> When I create a receiver in my default session for a particular address (queue), the receiver appear in the receiver list of the session.
> After receive the message, when I close the receiver with "receiver.close()", the receiver is closed but it still present in the default session list.
> Its state is closed and none active.
> When I receive another message, the list increase indefinitely and was never clear.
> Is there a way to prevent the list from growing indefinitely without closing the connection ?
>
> Any help will be appreciate.
>
> Regards
>
> Eric Clappier
>
>
>
> ________________________________
> 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
>
> ________________________________
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org For additional commands, e-mail: users-help@qpid.apache.org


Re: [qpid-proton-c++] Receiver list not clear

Posted by Robbie Gemmell <ro...@gmail.com>.
I believe there is a 'free' method in the C library, to clear out link
objects when they are done with (i.e locally and remotely closed). I
dont know if the C++ stuff exposes that. If it doesnt it should
probably be managing the 'freeing' itself.

Of course, there is a simpler way to avoid a buildup of receivers:
reuse a single receiver, stop creating and closing one for each
request. Naturally that depends on what specifically it is you are
doing, but creating receivers (or senders) per message is inefficient
and so not generally advisable.

On Tue, 2 Aug 2022 at 12:31, Clappier, Eric
<Er...@eaton.com.invalid> wrote:
>
> Dear all,
>
> I am writing an amqp client with Qpid proton C++ 0.34 on Debian 10.
> I create one client connection which I had some senders and some receivers on it.
> For example with a request, I create a sender to send the message and a receiver for the reply message.
> When I create a receiver in my default session for a particular address (queue), the receiver appear in the receiver list of the session.
> After receive the message, when I close the receiver with "receiver.close()", the receiver is closed but it still present in the default session list.
> Its state is closed and none active.
> When I receive another message, the list increase indefinitely and was never clear.
> Is there a way to prevent the list from growing indefinitely without closing the connection ?
>
> Any help will be appreciate.
>
> Regards
>
> Eric Clappier
>
>
>
> ________________________________
> 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
>
> ________________________________
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org