使用RabbitMQ进行Rebus接受来自Python的请求

时间:2019-03-06 21:58:35

标签: rabbitmq rebus

我正在设置一个使用Rebus从RabbitMQ读取的.NET核心服务。似乎放置在RabbitMQ中的请求需要具有.NET对象名称空间信息。有没有办法解决此问题。例如,如果我有一个用Python编写的服务,将项目放在队列中,则可以读取和处理这些请求。似乎每次我测试并尝试发送.NET对象之外的东西时,都会收到异常。

System.Collections.Generic.KeyNotFoundException: Could not find the key 'rbs2-content-type' - have the following keys only: 'rbs2-msg-id'

1 个答案:

答案 0 :(得分:0)

这取决于您在接收端使用的是哪个序列化器。

默认情况下,Rebus将使用其内置的JSON序列化程序以及相当“有用”的设置,这意味着将包括所有.NET类型名称。这样可以序列化复杂对象,包括抽象/接口引用等。

此序列化程序需要一些特殊的标头,例如|标头,它用于验证传入消息是否以JSON形式呈现(很可能是通过将rbs2-content-type作为其内容类型)。

如果要启用来自其他平台的消息的反序列化,建议您在消息上提供必要的标头(至少使用Rebus的内置序列化程序,标头还应包括要尝试的类型的.NET类型名称。反序列化为)。

另一种选择是安装自定义序列化器,这是一件很容易的事情–您可以通过注册序列化器来开始,如下所示:

application/json; charset=utf-8

然后您将其实现如下:

Configure.With(...)
    .(...)
    .Serialization(s => s.Register(c => new YourCrazySerializer()))
    .Start();

如您所见,修改Rebus以接受来自其他系统的消息非常容易。