PERF: message_bus will be deferred by server when flooded

The message_bus performs a fair amount of work prior to hijacking requests
this change ensures that if there is a situation where the server is flooded
message_bus will inform client to back off for 30 seconds + random(120 secs)

This back-off is ultra cheap and happens very early in the middleware.

It corrects a situation where a flood to message bus could cause the app
to become unresponsive

MessageBus update is here to ensure message_bus gem properly respects
Retry-After header and status 429.

Under normal state this code should never trigger, to disable raise the
value of DISCOURSE_REJECT_MESSAGE_BUS_QUEUE_SECONDS, default is to tell
message bus to go away if we are queueing for 100ms or longer
This commit is contained in:
Sam Saffron
2019-08-09 17:47:44 +10:00
parent b500ef77d7
commit 1f47ed1ea3
5 changed files with 49 additions and 6 deletions

View File

@@ -178,7 +178,7 @@ GEM
mini_mime (>= 0.1.1)
maxminddb (0.1.22)
memory_profiler (0.9.13)
message_bus (2.2.0)
message_bus (2.2.2)
rack (>= 1.1.3)
metaclass (0.0.4)
method_source (0.9.2)