我如何对 rabbitmq 和 node js 使用 crud 操作?
How can i usw crud operations with rabbitmq and nodejs?
我是这个话题的新手,但仍然想知道如何解决这个问题。
我想构建一个使用消息传递在 nodejs 服务器上执行 crud 操作的系统。
我了解 Rest,但我不知道如何将其转换为使用 rabbitmq 的消息传递。
编辑:
我想我必须让我的问题更清楚一点:
我想要做的是将我的 Java 客户端使用 amqp 和 rabbitMQ 生成的消息发送到 node.js 服务器。该消息包含一个 JSON 对象。
一些数据应该发送到数据库中(mysql)。
我的代码看起来像这样(Java 制作人):
JSONObject obj = new JSONObject();
obj.put("fuellstand", behaelter_1.getFuellstand());
obj.put("behaelter", behaelter_1.getId());
obj.put("timestamp", currentTimestamp);
//String message = behaelter_1.getFuellstand()+" "+ behaelter_1.getId()+" "+currentTimestamp;
String message = obj.toJSONString();
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
//channel.basicPublish("",QUEUE_NAME , , arg3);
System.out.println(message+" "+message.getBytes("UTF-8"));
这就是我的 nodejs 服务器尝试使用它的方式:
amqp.connect('amqp://localhost', function (err, conn) {
if (err) {
console.log("fehler mit dem amqp host!")
throw(err);
} else {
conn.createChannel(function (err, ch) {
if (err) {
console.log("failing to createChanel")
throw(err);
} else {
var q = 'alerts';
ch.assertQueue(q, {durable: false});
console.log(" [*] Waiting for something in %s. CTRL+C to end", q);
ch.consume(q, function (msg) {
console.log(msg);
}, {noAck: true});
}
});
}
});
控制台returns以下内容:
{ fields: { consumerTag: 'amq.ctag-G3vsZRIGRZJT1qntZ1hTuw',
deliveryTag: 1,
redelivered: false,
exchange: '',
routingKey: 'alerts' },properties: {},content: <Buffer 7b 22 66 75 65 6c 6c 73 74 61 6e 64 22 3a 32 32 2c 22 62 65 68 61 65 6c 74 65 72 22 3a 31 2c 22 74 69 6d 65 73 74 61 6d 70 22 3a 32 30 31 36 2d 31 32 ... > }
此时我唯一的问题是解码 json j 构建。我不明白为什么我不能解码缓冲区。还是我弄错了什么?
RabbitMQ不是数据库,不支持CRUD操作
事实证明我不得不使用以下代码来访问消息的内容
msg.content.toString
现在我只需要将其解析为 json 即可访问单个 json 属性
我是这个话题的新手,但仍然想知道如何解决这个问题。 我想构建一个使用消息传递在 nodejs 服务器上执行 crud 操作的系统。 我了解 Rest,但我不知道如何将其转换为使用 rabbitmq 的消息传递。
编辑: 我想我必须让我的问题更清楚一点: 我想要做的是将我的 Java 客户端使用 amqp 和 rabbitMQ 生成的消息发送到 node.js 服务器。该消息包含一个 JSON 对象。 一些数据应该发送到数据库中(mysql)。
我的代码看起来像这样(Java 制作人):
JSONObject obj = new JSONObject();
obj.put("fuellstand", behaelter_1.getFuellstand());
obj.put("behaelter", behaelter_1.getId());
obj.put("timestamp", currentTimestamp);
//String message = behaelter_1.getFuellstand()+" "+ behaelter_1.getId()+" "+currentTimestamp;
String message = obj.toJSONString();
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
//channel.basicPublish("",QUEUE_NAME , , arg3);
System.out.println(message+" "+message.getBytes("UTF-8"));
这就是我的 nodejs 服务器尝试使用它的方式:
amqp.connect('amqp://localhost', function (err, conn) {
if (err) {
console.log("fehler mit dem amqp host!")
throw(err);
} else {
conn.createChannel(function (err, ch) {
if (err) {
console.log("failing to createChanel")
throw(err);
} else {
var q = 'alerts';
ch.assertQueue(q, {durable: false});
console.log(" [*] Waiting for something in %s. CTRL+C to end", q);
ch.consume(q, function (msg) {
console.log(msg);
}, {noAck: true});
}
});
}
});
控制台returns以下内容:
{ fields: { consumerTag: 'amq.ctag-G3vsZRIGRZJT1qntZ1hTuw',
deliveryTag: 1,
redelivered: false,
exchange: '',
routingKey: 'alerts' },properties: {},content: <Buffer 7b 22 66 75 65 6c 6c 73 74 61 6e 64 22 3a 32 32 2c 22 62 65 68 61 65 6c 74 65 72 22 3a 31 2c 22 74 69 6d 65 73 74 61 6d 70 22 3a 32 30 31 36 2d 31 32 ... > }
此时我唯一的问题是解码 json j 构建。我不明白为什么我不能解码缓冲区。还是我弄错了什么?
RabbitMQ不是数据库,不支持CRUD操作
事实证明我不得不使用以下代码来访问消息的内容
msg.content.toString
现在我只需要将其解析为 json 即可访问单个 json 属性