【问题标题】:RabbitMQ, EasyNetQ With NodeJS?RabbitMQ、EasyNetQ 与 NodeJS?
【发布时间】:2014-05-08 00:47:54
【问题描述】:

我试图了解集成这些技术的合理性。我将如何将 NodeJS(目前使用 amqplib,但可以更改)跨 RabbitMQ 集成到 EasyNetQ?

我有它的工作,除了 EasyNetQ 期待一个对象(我认为)和 Node/amqplib 只能发送字符串。

C#代码:

Bus.Subscribe<BusManifestHolla>(HollaID,
    msg => {
        Console.WriteLine("Received Manifest Holla ID {0}", msg.ManifestID.ToString());
        Console.WriteLine("Responding with Manifest Yo ID {0}", YoID_1);
        Bus.Publish(new BusManifestYo { ManifestID = msg.ManifestID, ServiceName = YoID_1 });
    }
);

NodeJS 代码:

var b = new Buffer(JSON.stringify(new dto.BusManifestHolla(uuid.v4())));
ch.publish(Play.exchangeName, '#', b);

结果:

DEBUG: HandleBasicDeliver on consumer: a60b7760-e22f-4685-9f65-039bef19f58c, deliveryTag: 1
DEBUG: Recieved
    RoutingKey: '#'
    CorrelationId: ''
    ConsumerTag: 'a60b7760-e22f-4685-9f65-039bef19f58c'
    DeliveryTag: 1
    Redelivered: False
ERROR: Exception thrown by subscription callback.
    Exchange:    'RabbitMon.BusManifestHolla:RabbitMon'
    Routing Key: '#'
    Redelivered: 'False'
Message:
{"Guid":"a6cf174d-9b77-4558-bbda-efe9d8451dff"}
BasicProperties:
ContentType=NULL, ContentEncoding=NULL, Headers=[], DeliveryMode=0, Priority=0,    CorrelationId=NULL, ReplyTo=NULL, Expiration=NULL, MessageId=NULL, Timestamp=0, Type=NULL, UserId=NULL, AppId=NULL, ClusterId=
Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
   at EasyNetQ.TypeNameSerializer.DeSerialize(String typeName)
   at EasyNetQ.RabbitAdvancedBus.<>c__DisplayClass16.<Consume>b__15(Byte[] body, MessageProperties properties, MessageReceivedInfo messageRecievedInfo)
   at EasyNetQ.Consumer.HandlerRunner.InvokeUserMessageHandler(ConsumerExecutionContext context)

有没有办法通过总线发送对象?你如何整合这两者?

【问题讨论】:

    标签: node.js rabbitmq node-amqp easynetq


    【解决方案1】:

    TypeNameSerializer.DeSerialize 调用失败。在您的节点代码中,您需要使用 EasyNetQ 在另一端应该期望的类型填充 BasicProperties.Type。这需要是一个完全限定的名称,包括程序集名称。只需查看 EasyNetQ 为您的 BusManifestHolla 队列指定的名称减去 HollaID 值(和下划线)。

    诚然,错误消息并不是很有帮助。应该可以改进吧。

    【讨论】:

    • 很高兴看到这是一个选项(我正在考虑将 EasyNetQ 包装在 EdgeJS 中)。顺便说一句(对于那些好奇的人),类型最终是 'RabbitMon.BusManifestHolla:RabbitMon'...
    • 订阅/消费方面有什么技巧吗?我短暂地让它工作,现在我无法重现它。我很高兴将其变成一个问题并提供更多细节。其实我只是做了stackoverflow.com/questions/23554784/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2016-09-18
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多