Могу ли я динамически создать экскаватор RabbitMQ из моего приложения NodeJS? - PullRequest
0 голосов
/ 01 марта 2019

Плагин RabbitMQ shovel предоставляет HTTP API для создания и настройки экскаваторов.Предполагая, что я включил плагин управления лопатами и лопатами для своего экземпляра сервера RabbitMQ, могу ли я динамически создавать лопатки из своего приложения NodeJS?

В настоящее время я использую amqplib для подключения к обмену.https://www.squaremobius.net/amqp.node/channel_api.html

Однако я не вижу API для динамического создания лопаты.Это достижимо или есть другие библиотеки, которые поддерживают это?

1 Ответ

0 голосов
/ 04 марта 2019

amqplib не предоставляет какого-либо конкретного метода для создания динамических лопат, но вы можете сделать это, используя API-интерфейс управления на основе HTTP , как указано в документации: https://www.rabbitmq.com/shovel-dynamic.html#tutorial

Итак, в чистом Node.js это и пример HTTP-запроса (метод PUT) для программного создания лопаты:

var http = require('http');

var rabbit_host = "myrabbitmq.com";
var token = Buffer.from("admin:admin_pwd").toString('base64');
var shovel_name = "my_shovel";

var payload = {
    "component": "shovel",
    "vhost": "/",
    "name": "my_shovel",
    "value": {
        "src-uri": "amqp://user1:pwd1@myrabbitmq.com",
        "src-exchange": "test",
        "dest-uri": "amqp://user2:pwd2@anotherbroker.com",
        "dest-exchange-key": "test2",
        "add-forward-headers": false,
        "ack-mode": "on-confirm",
        "delete-after": "never"
    }
};

var options = {
  "host": rabbit_host,
  "port": 15672,
  "path": "/api/parameters/shovel/%2F/" + shovel_name,
  "method": "PUT",
  "headers": { 
    "Authorization" : "Basic " + token,
    "Content-Type" : "application/json",
  }
}

var callback = function(response) {
    var str = ''
    response.on('data', function(chunk){
        str += chunk;
    });

    response.on('end', function(){
        console.log("end: response="+str);
    });
}

var body = JSON.stringify(payload);
http.request(options, callback).end(body).on('error', function(e) {
    console.log("error: " + e.message);
});

Очевидно, что хост "myrabbitmq.com" должен быть доступен из узлаСценарий .js на порту 15672.

В приведенном выше примере создается лопата от «myrabbitmq.com» до «anotherbroker.com», указывающая обмены для маршрутизации сообщений.

...