-
Notifications
You must be signed in to change notification settings - Fork 219
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[*ERS] AMQP concurrent_requests basic.ack exception #4146
Comments
Delivery Identifiers: Delivery Tags Delivery tags are monotonically growing positive integers and are presented as such by client libraries. Client library methods that acknowledge deliveries take a delivery tag as an argument. Because delivery tags are scoped per channel, deliveries must be acknowledged on the same channel they were received on. Acknowledging on a different channel will result in an "unknown delivery tag" protocol exception and close the channel. |
@danbogos please bump 2 000 000 CDR in stress test are locked |
Previously, msg.Ack(true) was used, which is mostly used for batch processing. It mistakenly acknowledged all previously unacknowledged messages, causing errors from the AMQP server. Now, messages are acknowledged individually after each one is processed. Messages that ERs failed to process are now rejected and requeued for future processing attempts. The reader is now closed immediately if the message delivery channel closes. Therefore, it prevents an endless loop by avoiding continuous consumption from empty or closed channels. Addresses: cgrates#4146
Previously, msg.Ack(true) was used, which is mostly used for batch processing. It mistakenly acknowledged all previously unacknowledged messages, causing errors from the AMQP server. Now, messages are acknowledged individually after each one is processed. Messages that ERs failed to process are now rejected and requeued for future processing attempts. The reader is now closed immediately if the message delivery channel closes. Therefore, it prevents an endless loop by avoiding continuous consumption from empty or closed channels. Addresses: #4146
Hi, Thanks for the find and for providing detailed info. This issue should be solved by the latest commit on master. Let us know if you have any other issues. Also, regarding your latest comment:
Could you please clarify what you meant by this? Thanks, |
Previously, msg.Ack(true) was used, which is mostly used for batch processing. It mistakenly acknowledged all previously unacknowledged messages, causing errors from the AMQP server. Now, messages are acknowledged individually after each one is processed. Messages that ERs failed to process are now rejected and requeued for future processing attempts. The reader is now closed immediately if the message delivery channel closes. Therefore, it prevents an endless loop by avoiding continuous consumption from empty or closed channels. Addresses: cgrates#4146
Previously, msg.Ack(true) was used, which is mostly used for batch processing. It mistakenly acknowledged all previously unacknowledged messages, causing errors from the AMQP server. Now, messages are acknowledged individually after each one is processed. Messages that ERs failed to process are now rejected and requeued for future processing attempts. The reader is now closed immediately if the message delivery channel closes. Therefore, it prevents an endless loop by avoiding continuous consumption from empty or closed channels. Addresses: #4146
Hi @ionutboangiu , Tested with 1 to 1024 // requests. |
Hi Teams,
Insprired from AMQPER / amqp_it_test.go to configure the consumer, I have unexpectedly closed TCP connection between MQserver and Cgrates.
[*ERS] *amqp_json_map TO [*ESS] *els : ERROR.
[*ERS] *amqp_json_map queue A TO [*ESS] *amqp_json_map queue B : ERROR.
The context is to consume the CDR in queue A with the *ERS, and use the *ESS to push the valuable CDR as *rated mode with cost details to queue B for a third party.
OR
Consume the CDR in queue A with the *ERS, and use the *ESS to push the valuable CDR with cost details to ELK for a third party analysis.
Both contexts are working very well until concurrent_requests is set to a very low value.
Actualy not possible to replicate the amqp_it_test.go configuration, got closed TCP connection after few seconds from MQServer.
The main vector to replicate is to play with the "concurrent_requests" parameter and keep all others according to the amqp_it_test.go.
CGRateS@v0.11.0~dev
test:
The text was updated successfully, but these errors were encountered: