var amqp = require('amqplib');
connect([url, [socketOptions]]) var amqp = require('amqplib/callback_api');
connect([url, [socketOptions]], function(err, conn) {...}) url 中的参数
可以在URI的查询部分中给出进一步的AMQP调整参数,例如,如'amqp://localhost?frameMax=0x1000'。这些是: frameMax 连接上允许的最大帧的大小(以字节为单位)。0意味着没有限制(但是因为帧的大小字段是无符号的32位整数,所以它是perforce 2^32 - 1); 我将其默认为0x1000,即4kb,这是允许的最小值,适合多种用途,而不是通过Node.JS的缓冲池。 channelMax 允许的最大通道数。默认是 0,意思是2^16 - 1。 heartbeat 连接心跳的周期,以秒为单位。默认为0; locale 错误消息的所需区域设置。RabbitMQ只使用过en_US; 幸运的是,这是默认的。 url 也可以作为对象使用 {
protocol: 'amqp',
hostname: 'localhost',
port: 5672,
username: 'guest',
password: 'guest',
locale: 'en_US',
frameMax: 0,
heartbeat: 0,
vhost: '/',
}

//关闭连接
connection.close()
回调

connection.close([function(err) {...}])

//断言队列是否存在

assertQueue

//检查队列是否存在

checkQueue

//删除队列(队列不存在将会关闭通道)

deleteQueue

RPC 服务端

var amqp = require('amqplib/callback_api');
//建立连接
amqp.connect({protocol:'amqp(协议 有amqp 和 amqps)',hostname:'rabbit服务器地址',port:端口号,username:'用户名',password:'密码'},function(err,conn) { conn.createChannel(function(err,ch){
var q = 'rpc_queue'; ch.assertQueue(q,{ durable:false });
ch.prefetch(1);
console .log('[x]等待RPC请求');
ch.consume(q,function reply(msg) {
var n = parseInt(msg.content.toString()); console.log("[.] fib(%d)",n); var r = fibonacci(n); ch.sendToQueue(msg.properties.replyTo,new Buffer(r.toString()),{correlationId:msg.properties.correlationId});
ch.ack(msg);
});
});
}); function fibonacci(n) {
if(n == 0 || n == 1){
return n;
}else{
fibonacci(n - 1)+ fibonacci(n - 2);
}
}

客户端代码

var amqp = require('amqplib/callback_api');

var args = process.argv.slice(2);
console.log(args);
if(args.length == 0){
console.log("Usage:rpc_client.js num");
process.exit(1);
} amqp.connect({protocol:'amqp(协议有 amqp 和 amqps)',hostname:'rabbit服务器地址',port:端口号,username:'用户名',password:'密码'},function(err,conn) {
conn.createChannel(function(err,ch) {
ch.assertQueue('',{ exclusive:true },function(err,q) {
//随机数唯一值
var corr = generateUuid();
var num = parseInt(args[0]); console.log('[x] Requesting fib(%d)',num); ch.consume(q.queue,function(msg) {
if(msg.properties.correlationId == corr){
console.log('[.] Got%s',msg.content.toString());
setTimeout(function() {conn.close(); process.exit(0)},500);
}
},{ noAck:true });
//replyTo:q.queue 设置
ch.sendToQueue('rpc_queue',new Buffer(num.toString()),{correlationId:corr,replyTo:q.queue});
});
});
}); function generateUuid() {
return Math.random().toString()+
Math.random().toString()+
Math.random().toString();
}

Node.js amqplib 连接 Rabbitmq 学习笔记的更多相关文章

  1. 《Node.js核心技术教程》学习笔记

    <Node.js核心技术教程>TOC \o "1-3" \h \z \u 1.章模块化编程 2019.2.19 13:30' PAGEREF _101 \h 1 08D ...

  2. 在Node.js中使用RabbitMQ系列二 任务队列

    在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心 ...

  3. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  4. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

  5. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  6. RabbitMQ学习笔记1-hello world

    安装过程略过,一搜一大把. rabbitmq管理控制台:http://localhost:15672/   默认账户:guest/guest RabbitMQ默认监听端口:5672 JAVA API地 ...

  7. 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群

    在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...

  8. 官网英文版学习——RabbitMQ学习笔记(一)认识RabbitMQ

    鉴于目前中文的RabbitMQ教程很缺,本博主虽然买了一本rabbitMQ的书,遗憾的是该书的代码用的不是java语言,看起来也有些不爽,且网友们不同人学习所写不同,本博主看的有些地方不太理想,为此本 ...

  9. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...

随机推荐

  1. XShell免费版的安装配置教程以及使用教程(超级详细)

    ​一. XShell的作用 XShell可以在Windows界面下来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的.它支持 RLOGIN.SFTP.SERIAL.TELNET.SSH2 ...

  2. 利用js获取不同页面间跳转需要传递的参数

    获取参数的js函数如下: function GetQueryValue(queryName) { var query = decodeURI(window.location.search.substr ...

  3. 如何写好一份晋升PPT(附PPT模板)

    又到了每年晋升述职的时间,在过去的5.6年里,我以评委身份参与了大量的晋升述职(主要是前端,也包括客户端和测试),也辅导了许多(100+)组内外的同学,指导他们书写和完善PPT.过程中我发现大家有许多 ...

  4. 通过nfs将centos目录挂载到windows 系统的磁盘上

    环境:centos8,windows7 1.在centos上安装nfs服务 yum -y install nft-utils 2.启动nfs服务 systemctl start nfs-server ...

  5. JavaScript学习基础1

    ##JavaScript: # 概念:一门运行在客户端的脚本语言 *运行在客户端浏览器中的.属于前端三件套之一,属于静态资源,每一个浏览器都有JavaScript的解析引擎 *脚本语言:不需要编译,直 ...

  6. MySql免安装版 Error 2003 Can connect to MySQL server on ...

    现象描述:mysql只能本地登录,无法远程登录 解决方案: 1. 查看mysql端口(默认端口3306,命令端口根据需要修改),发现只有本地连接端口开放. netstat -an|findstr 33 ...

  7. C#中检查null的语法糖

    今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了.然后我又想起来null检查,这个可以说一说. 函数参数null检查 传统写法 写一个函 ...

  8. jmeter脚本编写

    jmeter脚本编写 一.http协议接口编写注意事项 1.请求体为json格式:一定要写请求头Content-Type:application/json 2.json格式文本 2.1 key-val ...

  9. matplotlib画图工具/绘制散点图

    绘制散点图 import matplotlib.pyplot as plt fig=plt.figure() ax = fig.add_subplot(111) ax.scatter(x,y, s,c ...

  10. [AcWing 798] 差分矩阵

    点击查看代码 #include<iostream> using namespace std; const int N = 1e3 + 10; int a[N][N], b[N][N]; v ...