【发布时间】:2022-01-27 10:57:40
【问题描述】:
我有一个go 服务向rabbitmq 发布消息,负责该部分的代码如下:
package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
conn, amqError := amqp.Dial("amqp://localhost:5672/")
if amqError != nil {
panic(amqError)
}
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
q, err := ch.QueueDeclare(
"default", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
failOnError(err, "Failed to declare a queue")
body := "{ \"body\":\"Hello...\", \"pattern\":\"test\", \"age\":\"20\"}"
err = ch.Publish(
"", // exchange
q.Name, // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
},
)
failOnError(err, "Failed to publish a message")
}
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
消耗消息的Nestjs部分如下:
import { Controller } from '@nestjs/common';
import { Ctx, EventPattern, Payload, RmqContext } from '@nestjs/microservices';
@Controller()
export class AppController {
constructor() { }
@EventPattern("test")
getEventMessage(@Payload() data: any, @Ctx() context: RmqContext) {
console.log("data is -> ", data) // always undefined
console.log(
"content of message is -> ",
JSON.parse(
context.getMessage().content.toString() // from buffer to string
)
)
}
}
现在的问题是我无法从数据中获取消息,而不是从ctx 解析它,我还需要以json 的形式发送消息,而不会跳过像"\"" 这样的双引号
【问题讨论】:
-
这看起来是意料之中的,per the docs
-
@edd 那么将
@Payload装饰器添加到首位的原因是什么?
标签: node.js go rabbitmq microservices nestjs