diff --git a/controller/RabbitMQ.cpp b/controller/RabbitMQ.cpp
index 096d3f539..f5a5c1d60 100644
--- a/controller/RabbitMQ.cpp
+++ b/controller/RabbitMQ.cpp
@@ -48,7 +48,10 @@ void RabbitMQ::init()
     }
 
     static int chan = 0;
-    _channel = ++chan;
+	{
+		Mutex::Lock l(_chan_m);
+    	_channel = ++chan;
+	}
     amqp_channel_open(_conn, _channel);
     r = amqp_get_rpc_reply(_conn);
     if(r.reply_type != AMQP_RESPONSE_NORMAL) {
@@ -88,4 +91,4 @@ std::string RabbitMQ::consume()
     return msg;
 }
 
-}
\ No newline at end of file
+}
diff --git a/controller/RabbitMQ.hpp b/controller/RabbitMQ.hpp
index 74023b124..d341681be 100644
--- a/controller/RabbitMQ.hpp
+++ b/controller/RabbitMQ.hpp
@@ -36,9 +36,10 @@ struct MQConfig {
 };
 }
 
-
 #ifdef ZT_CONTROLLER_USE_LIBPQ
 
+#include "../node/Mutex.hpp"
+
 #include <amqp.h>
 #include <amqp_tcp_socket.h>
 #include <string>
@@ -65,6 +66,9 @@ private:
     int _status;
 
     int _channel;
+
+	Mutex _chan_m;
+
 };
 
 }