头一次写文章,有写的不好或者写的不对的欢迎批评指正!谢谢!

一、安装

erlang

1.下载erlang

进入官网

2.点击下载(windows)

rabbitmq java整合 hengine_rabbitmq

3.点击安装

注意 保存在自己想要放在的路径下

配置环境变量

ERLANG_HOME
D:\program\erl-24.3

rabbitmq java整合 hengine_客户端_02


cmd运行查看是否正确

rabbitmq java整合 hengine_node.js_03

下载RabbitMQ

1.打开链接

下载链接

2.向下滑动,点击下载

rabbitmq java整合 hengine_客户端_04

3.安装,找到自己想要放到的目录

4.进入sbin目录

rabbitmq-plugins enable rabbitmq_management

5.输入 rabbitmqctl status(在sbin目录下输入) , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ

rabbitmq java整合 hengine_客户端_05

6.进入页面(默认localhost:15672)

用户名和密码都是guest

rabbitmq java整合 hengine_客户端_06

二、RabbitMQ简介

定义

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。(来自百度百科)

常用概念和术语

  • 生产者:发送消息客户端
  • 消费者:接收消息服务端
  • 队列(queue):存储消息的地方,本质是一个大的消费缓冲区,生产者把消息发送到此队列,消费者尝试从这个队列中接收数据
  • 信道(channel):大部分用于完成任务的API都在此通道实现

三、Hello World

参考链接 RabbitMQ是一个消息代理,负责接收和转发消息。你可以把它想象成一个邮局:当你把你想要投寄的邮件放进一个邮箱时,你可以确定邮递员最终会把邮件送到你的收件人那里。在这个类比中,RabbitMQ是一个邮箱、一个邮局和一个邮递员。
RabbitMQ和邮局的主要区别是,它不处理纸张,而是接受、存储和转发二进制数据——消息。

1.安装模块

npm install amqplib #安装amqp.node 客户端

2.编写send.js发送端(官方代码)

//1.In send.js, we need to require the library first 首先,引入amqplib模块

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

//2.then connect to RabbitMQ server  连接到RabbitMQ服务器
amqp.connect('amqp://localhost', function(error0, connection) {
    if (error0) {
        throw error0;
    }
	 
	 //Next we create a channel, which is where most of the API for getting things done resides:
	 //接下来我们创建个信道,大部分用于完成任务的API都在此通道实现
    connection.createChannel(function(error1, channel) {
        if (error1) {
            throw error1;
        }
		//To send, we must declare a queue for us to send to; then we can publish a message to the queue
		//要发送,我们必须要声明一个队列,然后我们可以将消息发布到队列中
        var queue = 'hello';
        
        //要发送的消息
        var msg = 'Hello World!';
		
		// This makes sure the queue is declared before attempting to consume from it
		//确保队列消费之前被声明	
        channel.assertQueue(queue, {
            durable: false
        });
        channel.sendToQueue(queue, Buffer.from(msg));

        console.log(" [x] Sent %s", msg);
    });
   
    //Declaring a queue is idempotent - it will only be created if it doesn't exist already. The message content is a byte array, so you can encode whatever you like there.
     //声明一个队列是幂等的 - 只有当它不存在时才会创建它。消息内容是一个字节数组,因此您可以在那里编码任何您喜欢的内容。
    setTimeout(function() {
        connection.close();
        process.exit(0);
    }, 500);
});

—穿插一个字符串、对象或者数组转换成buffer数据

var user = {
    name: 12,
    age: 10,
    gender: 1
}
//对象转换成Buffer
var buf = Buffer.from(JSON.stringify(user), 'utf8');
console.log(buf)
//Buffer转换成对象
var s = JSON.parse(buf.toString('utf8'));
console.log(s)
console.log(typeof s)

//num转换
var num = 1;
var buf2 = Buffer.from(JSON.stringify(num), 'utf8');
console.log(buf2)

var s2 = JSON.parse(buf2.toString('utf8'));
console.log(s2)

//数组转换
var nums = [1, 2, 3, 4, 5];
var buf3 = Buffer.from(JSON.stringify(nums), 'utf8');
console.log(buf3)

var s3 = JSON.parse(buf3.toString('utf8'));
console.log(s3)

var user2 = {
    name: 12,
    age: 10,
    gender: 1,
    nums: [1, 2, 3, 4, 5],
    info:{
        className:'二班',
        grade:'三年级'
    }
}

var buf4 = Buffer.from(JSON.stringify(user2), 'utf8');
console.log(buf4)

var s4 = JSON.parse(buf4.toString('utf8'));
console.log(s4)
console.log(typeof s4)

结果如下

rabbitmq java整合 hengine_客户端_07

3.接收方(官方代码)

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

amqp.connect('amqp://localhost', function(error0, connection) {
    if (error0) {
        throw error0;
    }
    connection.createChannel(function(error1, channel) {
        if (error1) {
            throw error1;
        }

        var queue = 'hello';

        channel.assertQueue(queue, {
            durable: false
        });

        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);

        channel.consume(queue, function(msg) {
            console.log(" [x] Received %s", msg.content.toString());
            //channel.ack(msg);
        }, {
        	//表示自动提交,如果不自动提交 则要手动ack数据 channel.ack(msg);
            noAck: true
            //noAck:false channel.ack(msg); --配套使用写在consume的函数里面
        });
    });
});

4.运行

rabbitmq java整合 hengine_rabbitmq_08


如果出现25672错误可以看此文档解释,同时可以修正

查看rabbitMQ心跳

1.点击connections

rabbitmq java整合 hengine_客户端_09


2.点击name

rabbitmq java整合 hengine_客户端_10


3.查看心跳详情

rabbitmq java整合 hengine_node.js_11