amqp: Rate limit reconnections to AMQP
authorMatt Mullins <mmullins@mmlx.us>
Mon, 4 Jan 2016 07:37:16 +0000 (23:37 -0800)
committerMatt Mullins <mmullins@mmlx.us>
Mon, 4 Jan 2016 07:37:16 +0000 (23:37 -0800)
amqp/amqp_bot_connection.erl
amqp/amqp_bot_sup.erl

index a851e8c..2bc3189 100644 (file)
@@ -3,7 +3,7 @@
 -vsn(1).
 
 -export([
-          start_link/0,
+          start_link/1,
           get_connection/0,
                  open_channel/0
         ]).
           handle_call/3
         ]).
 
+-define(RESTART, timer:seconds(30)).
+
 -include_lib("amqp_client/include/amqp_client.hrl").
 
 % Public-facing
-start_link() ->
-    gen_server:start_link({local, ?MODULE}, ?MODULE, none, []).
+start_link(RatelimitTableId) ->
+    gen_server:start_link({local, ?MODULE}, ?MODULE, {RatelimitTableId}, []).
 
 get_connection() ->
     gen_server:call(?MODULE, get_connection).
@@ -27,7 +29,8 @@ open_channel() ->
     amqp_connection:open_channel(Connection).
 
 % Callbacks
-init(_Args) ->
+init({RatelimitTableId}) ->
+    rate_limit:wait_and_reset(RatelimitTableId, amqp_connection, ?RESTART),
     start_link_connection().
 
 handle_call(get_connection, _From, Connection) ->
index a1a69c4..ce39832 100644 (file)
@@ -15,9 +15,10 @@ start_link() ->
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
 
 init(_) ->
+    TableId = rate_limit:create(),
     Children = [
                  {amqp_bot_connection, % Id
-                  {amqp_bot_connection, start_link, []}, % MFA
+                  {amqp_bot_connection, start_link, [TableId]}, % MFA
                   permanent,
                   5,
                   worker,