Throttling can be triggered for a single ApsaraMQ for RabbitMQ instance based on the peak transactions per second (TPS) of the instance. This topic describes the throttling rules for a ApsaraMQ for RabbitMQ instance, the operations performed by the consumer and producer after throttling is triggered, and the best practices that you can use for throttling.

Operations performed by the consumer and producer after throttling is triggered

If the peak TPS of a ApsaraMQ for RabbitMQ instance exceeds the TPS threshold value that is specified when the ApsaraMQ for RabbitMQ instance is purchased, throttling is triggered for the instance.

The following operations are performed after throttling is triggered:
  • The ApsaraMQ for RabbitMQ broker returns an error code and an error message.
  • The ApsaraMQ for RabbitMQ broker closes the channel of the current request. You can detect exceptions in code and reopen the channel.

The following section describes the error code and error message:

  • Error code: reply-code=530
  • Error message: reply-text=denied for too many requests
The following sample code provides an example of an error stack of the client in Java:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>
(reply-code=530, reply-text=denied for too many requests, ReqId:5FB4C999314635F952FCBFF6, ErrorHelp[dstQueue=XXX_test_queue,
srcExchange=Producer.ExchangeName,bindingKey=XXX_test_bk, http://mrw.so/6rNqO8], class-id=50, method-id=20)
    at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:516)
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182)
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114)
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:672)
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:599)
    at java.lang.Thread.run(Thread.java:748)

Query the peak TPS of an instance

You can query the actual peak TPS of an instance to understand the traffic fluctuation and peak traffic of your service and determine whether the current instance specification meets your business requirements.

ApsaraMQ for RabbitMQ provides the following methods that you can use to query the peak TPS of an instance based on a granularity of seconds:

MethodDescriptionTime granularityResource level
(Recommended)Query the peak TPS of an instance and configure an alert rule by using CloudMonitorBenefits:
  • You can use this query method to query the changes of peak TPS in the previous 14 days. This query method helps you identify exceptions in an efficient manner.
  • You can use the instance peak TPS as a metric to configure an alert rule.
  • You are not charged when you use this query method.
Peak TPS at the minute level

The peak TPS of an instance during a 1-minute statistical period

Peak TPS of an instance
(Recommended)Query the peak TPS of an instance on the instance details page
  • Benefits:
    • You can use this query method to query the peak TPS at the second level. This query method helps you identify exceptions in an accurate manner.
    • You can query the peak TPS of a specific API operation.
    • You are not charged when you use this query method.
  • Usage notes: To prevent excessively long query results, only the query result for the previous 10 minutes is returned.
Peak TPS at the second level
  • Peak TPS of an instance
  • Peak TPS of a specific API operation
Query the peak TPS by using Log Service
  • Benefits: You can use Log Service statements to query the peak TPS of an instance. This query method helps you identify exceptions in complex business scenarios.
  • Usage notes:
    • Compared with the preceding two query methods, this query method is more complicated and the query result is not easy to understand.
    • You are charged when you use Log Service. For information about the pricing of Log Service, see Billable items.
Peak TPS at the second levelPeak TPS of an instance

Rules based on which the TPS of an instance is calculated

If you call one of the following operations once, one TPS is counted.

  • ConnectionOpen and ChannelOpen
  • QueueDeclare, QueueDelete, QueueBind, and QueueUnbind
  • ExchangeDeclare and ExchangeDelete
  • ExchangeBind and ExchangeUnBind
  • SendMessage, BasicConsume, BasicGet, BasicAck, BasicReject, BasicNack, and BasicRecover
Note

The delayed message is an advanced message type in ApsaraMQ for RabbitMQ. One API call to send or receive a delayed message is counted as five API calls to send or receive a normal message.

For example, if delayed messages are published 10 times per second, the TPS is calculated based on the following formula: 10 times per second × 5 = 50 times per second.