【发布时间】:2016-12-22 08:40:39
【问题描述】:
我是这个话题的新手,但仍然想知道如何解决这个问题。 我想构建一个使用消息传递在 nodejs 服务器上执行 crud 操作的系统。 我知道 Rest,但我不知道如何用 rabbitmq 将其转换为消息传递。
编辑: 我想我必须让我的任务更清楚一点: 我想要做的是将我的 Java 客户端使用 amqp 和 rabbitMQ 生成的消息发送到 node.js 服务器。该消息包含一个 JSON 对象。 一些数据应该被发送到数据库(mysql)中。
我的代码看起来像这样(Java Producer):
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});
}
});
}
});
控制台返回以下内容:
{ 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 的消息后,您是否能够在订阅者应用程序中更新数据库?
标签: node.js rabbitmq crud messaging