0

我试图了解整合这些技术的合理性。我将如何跨 RabbitMQ 将 NodeJS(目前使用 amqplib,但可以更改)集成到 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 });
    }
);

节点代码:

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)

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

4

1 回答 1

2

It's failing on the TypeNameSerializer.DeSerialize call. In your node code you'll need to populate BasicProperties.Type with the type that EasyNetQ should expect at the other end. This needs to be a fully qualified name including the assembly name. Just look at the name that EasyNetQ has given to your BusManifestHolla queue minus the HollaID value (and underscore).

Admittedly that error message isn't very helpful. It probably could be improved.

于 2014-05-08T08:10:18.280 回答