amqplib 没有提供任何特定的方法来创建动态铲子,但你可以使用 的 管理基于HTTP的API 强> 如文档中所指定: 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”必须可以从端口15672上的Node.js脚本访问。
上面的例子创建了一个从“myrabbitmq.com”到“anotherbroker.com”的铲子,指定了路由消息的交换。