我已经尽力弄清楚了,但是我猜我在Dotnet/c#和消息队列方面的经验不足。
概括地说,我正在处理的情况是,我有两个项目。
首先项目是一个遗留的Dotnet项目,使用Apache NMS库从ActiveMQ队列中消费消息。
队列通常在生产中通过SSL连接,但在本地开发时,我通过TCP连接,所有工作正常,并积极连接&按预期退出队列。
一旦消息被脱队列,它们将使用JsonConvert DeserializeObject方法进行反序列化。
第二project是我创建的一个NodeJS项目,用于将消息放到队列中。
消息只是一个简单的对象,字符串化为JSON。
我正在使用AMQP Rhea npm包来连接和发送消息,以AMQP格式。
这一切都工作正常,消息按预期进入队列。
问题是当我对从队列中取出的消息进行反序列化时。
有一个异常,因为它遇到了我的JSON消息的前缀-我不知道前缀来自哪里。
我隐约怀疑这是因为我正在使用的协议之间存在冲突,这导致了问题,但在我发现自己陷入那个特殊的兔子洞之前-或者只是诉诸于使用不可靠的方法删除前缀-我希望你们中有一个更有经验的人可以帮助我指出正确的方向。
下面是一些有问题的c#代码片段:
这是我如何去排队的消息:
string dequeuedMessage = string.Empty;
List<string> messages = new List<string>();
IMessage message = _consumer.Receive(waitForMessage);
if (message is ITextMessage || message is IBytesMessage)
{
dequeuedMessage = (message is ITextMessage) ? (message as ITextMessage).Text : Encoding.UTF8.GetString((message as IBytesMessage).Content);
messages.Add(dequeuedMessage);
}
else
break;
有趣的是消息总是作为IBytesMessage类型出现,而不是前面作者所期望的(ITextMessage),这就是为什么我有这种隐约的怀疑。
我是这样反序列化消息的:
private IMessage BuildMessageObject(string message)
{
IMessage convertedMessage = JsonConvert.DeserializeObject<QueueMessage>(message);
return convertedMessage;
}
看一下前缀: