Page 1 of 1

Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 2:15 pm
by vineet
hi alt,

The Sent Queue always shows as 0. I have set speed of 1mps and sent 1500 messages but the queue always return 0.

Latest beta library version.

see log dump.

TX: Q:0, REQ: 147 (0.60 m/s), RSP: 145 (0.86 m/s); RX: Q:0, REQ: 145 (0.86 m/s), RSP: 147 (0.60 m/s)
TX: Q:0, REQ: 6 (0.03 m/s), RSP: 0 (NaN m/s); RX: Q:0, REQ: 0 (NaN m/s), RSP: 6 (0.03 m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 15 (0.07 m/s); RX: Q:0, REQ: 15 (0.07 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 44 (0.18 m/s); RX: Q:0, REQ: 44 (0.18 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 152 (0.61 m/s), RSP: 150 (0.86 m/s); RX: Q:0, REQ: 150 (0.86 m/s), RSP: 152 (0.61 m/s)
TX: Q:0, REQ: 6 (0.03 m/s), RSP: 0 (NaN m/s); RX: Q:0, REQ: 0 (NaN m/s), RSP: 6 (0.03 m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 15 (0.07 m/s); RX: Q:0, REQ: 15 (0.07 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 44 (0.18 m/s); RX: Q:0, REQ: 44 (0.18 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 157 (0.61 m/s), RSP: 155 (0.87 m/s); RX: Q:0, REQ: 155 (0.87 m/s), RSP: 157 (0.61 m/s)
TX: Q:0, REQ: 6 (0.03 m/s), RSP: 0 (NaN m/s); RX: Q:0, REQ: 0 (NaN m/s), RSP: 6 (0.03 m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 15 (0.07 m/s); RX: Q:0, REQ: 15 (0.07 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 44 (0.18 m/s); RX: Q:0, REQ: 44 (0.18 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 162 (0.62 m/s), RSP: 160 (0.87 m/s); RX: Q:0, REQ: 160 (0.87 m/s), RSP: 162 (0.62 m/s)
TX: Q:0, REQ: 6 (0.03 m/s), RSP: 0 (NaN m/s); RX: Q:0, REQ: 0 (NaN m/s), RSP: 6 (0.03 m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 15 (0.07 m/s); RX: Q:0, REQ: 15 (0.07 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 8 (0.04 m/s); RX: Q:0, REQ: 8 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 45 (0.17 m/s); RX: Q:0, REQ: 45 (0.17 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 167 (0.63 m/s), RSP: 165 (0.87 m/s); RX: Q:0, REQ: 165 (0.87 m/s), RSP: 167 (0.63 m/s)
TX: Q:0, REQ: 9 (0.02 m/s), RSP: 0 (NaN m/s); RX: Q:0, REQ: 0 (NaN m/s), RSP: 9 (0.02 m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 20 (0.06 m/s); RX: Q:0, REQ: 20 (0.06 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 12 (0.04 m/s); RX: Q:0, REQ: 12 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 12 (0.04 m/s); RX: Q:0, REQ: 12 (0.04 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 1 (∞ m/s), RSP: 65 (0.18 m/s); RX: Q:0, REQ: 65 (0.18 m/s), RSP: 1 (∞ m/s)
TX: Q:0, REQ: 364 (0.99 m/s), RSP: 362 (1.25 m/s); RX: Q:0, REQ: 362 (1.25 m/s), RSP: 364 (0.99 m/s)

Re: Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 5:13 pm
by alt
Hi vineet,

It means that library sends PDU immediately after serialization and remote side handles it fast enough.
SendSpeedLimit delays PDU before placing into the send queue.

Re: Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 5:22 pm
by vineet
So alt how we can get the count of messages that is inside the library for which pdu has not been sent.

And we are also getting esme_rmsgqful when we submitted in bulk with submitspeed of 240 any solution for this.

Re: Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 5:58 pm
by alt
With the version 2.9-beta you can use client.SendQueueLimit property to limit number of requests waiting for response which limits memory consumption for a smpp connection. It helps also to avoid ESME_RMSGQFUL (Message queue full) response status from the SMPP server.

The number of requests waiting for response you can read from metric: client.Metrics.Sent.Requests.WaitingForResponse

More about metrics https://docs.inetlab.com/smpp/v2.8/arti ... ml#metrics

Re: Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 6:04 pm
by vineet
please suggest a value for SendQueueLimit if normally batch submission is around 15k-25k to avoid ESME_RMSGQFUL. And shouldn't send speed limit should delay the message sending regardless how many are begin fed in queue.

Re: Queue Size shows 0 in metrics

Posted: Fri Nov 20, 2020 6:15 pm
by vineet
The number of requests waiting for response you can read from metric: client.Metrics.Sent.Requests.WaitingForResponse i tried this it always shows 0 or 1. but my problem is i have submitted batch containing 50 messages.

IEnumerable<SubmitSmResp> ResponseList = (await SMPPClient.SubmitAsync(batch)).ToArray();

SubmitSpeed is set to 1 mps.

Library is processing at 1 mps but there is no way to check the number of pending messages inside the library. all metrics shows wrong info.

like it should show that 45 messages are still pending for processing out of 50.

in v1 of library you sendqueue shows this information properly.

Re: Queue Size shows 0 in metrics

Posted: Mon Nov 23, 2020 9:06 pm
by alt
vineet wrote:
Fri Nov 20, 2020 6:04 pm
please suggest a value for SendQueueLimit if normally batch submission is around 15k-25k to avoid ESME_RMSGQFUL. And shouldn't send speed limit should delay the message sending regardless how many are begin fed in queue.
You should find out by provider when he sends ESME_RMSGQFUL status and how many not processed requests are allowed to send.

It works this way:
- application submit a message
- library checks if SendQueueLimit is full and blocks your code for short time until there is a free slot in requests without response collection.
- library delays the code execution when application sends too fast for SendSpeedLimit.
- library places a request to the send queue.
- send queue thread sends serialized PDU to remote endpoint.

Re: Queue Size shows 0 in metrics

Posted: Mon Nov 23, 2020 9:15 pm
by alt
vineet wrote:
Fri Nov 20, 2020 6:15 pm
The number of requests waiting for response you can read from metric: client.Metrics.Sent.Requests.WaitingForResponse i tried this it always shows 0 or 1. but my problem is i have submitted batch containing 50 messages.

IEnumerable<SubmitSmResp> ResponseList = (await SMPPClient.SubmitAsync(batch)).ToArray();

SubmitSpeed is set to 1 mps.
I think 1 mps is slow enough for remote side to process a request from your application.