Skip to content

Commit 1aff76b

Browse files
authored
Merge pull request #30 from kata-ai/fix/reconnect-rabbitmq-channel
Feat: Reconnect Channel
2 parents cab801a + a08a640 commit 1aff76b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

lib/service_sub_queue_rabbit.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const { async, utils } = require("merapi");
44
const ServiceSubQueue = require("merapi-plugin-service/lib/service_sub_queue");
55
const pack = require("../package");
6+
const sleep = require("then-sleep");
67

78
class ServiceSubRabbit extends ServiceSubQueue {
89

@@ -60,6 +61,11 @@ class ServiceSubRabbit extends ServiceSubQueue {
6061
let channel = this._channels[event];
6162

6263
if (channel) {
64+
channel.on("close", () => {
65+
console.dir(`${event} is closed`)
66+
this.reconnect(event)
67+
});
68+
6369
let queueName = `${this._namespace}.queue.${this.SERVICE_NAME}.${event}`;
6470

6571
yield channel.assertQueue(queueName, { durable: true });
@@ -80,6 +86,25 @@ class ServiceSubRabbit extends ServiceSubQueue {
8086
}
8187
}
8288

89+
*reconnect(event) {
90+
try {
91+
let desc = this.config.default("service.queue.subscribe", {});
92+
let prefetch = parseInt(this.config.default("service.rabbit.prefetch", 5));
93+
94+
let channel = yield this._connection.createChannel();
95+
yield channel.prefetch(prefetch);
96+
this._channels[event] = channel;
97+
98+
let method = yield this.injector.resolveMethod(desc[event]);
99+
this.createQueue(event, method);
100+
} catch (e) {
101+
this.logger.warn("Failed to connect channel " + event, e);
102+
yield sleep(3000);
103+
104+
yield this.reconnect(event);
105+
}
106+
}
107+
83108
*runMethod(method, payload) {
84109
let ret = method(payload);
85110
if (utils.isPromise(ret)) yield ret;

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "merapi-plugin-service-rabbit",
3-
"version": "0.6.5",
3+
"version": "0.6.6",
44
"description": "Provide RabbitMQ integration interface",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)