我使用与Azure Service Bus相关的Rebus创建概念证明,但是我解析放置的消息时存在一些问题来自外部源的队列。Rebus Azure ServiceBus - 源自外部服务的消息缺少MessageID
我收到错误消息:
Received message with empty or absent 'rbs2-msg-id' header!
我已经通过GitHub上一看,发现某人怎么也有类似的问题,为的RabbitMQ此房源,并建议使用装饰:
https://github.com/rebus-org/Rebus/issues/508
但是我不确定如何为消息ID做到这一点。
一种选择我已经走了下来,实际上修改Rebus.AzureTransport代码来做到这一点:
var messageId = headers.GetValueOrNull(Headers.MessageId);
if (string.IsNullOrEmpty(messageId))
{
messageId = Guid.NewGuid().ToString();
headers[Headers.MessageId] = messageId;
}
但宁愿替代!
我注意到另一件事,是一个BrokeredMessage被放在ASB这样的:
var message = new BrokeredMessage("<xml>This is a test message: " + DateTime.Now+ "</xml>");
它没有被正确序列化的卤面接收时。我得到以下错误:
Unhandled exception 1 while handling message with ID db13880d-124c-4ed5-993e-96faeca0f140: System.Collections.Generic.KeyNotFoundException: Could not find the key 'rbs2-content-type'
通过重写串行器,该underdying消息跨越如来:
@strin3http://schemas.microsoft.com/2003/10/Serialization/?6This is a test message: 06/12/2016 07:44:21
,所以我不知道我做错了。
在此先感谢。
嗨,感谢您的回复。我将研究进行接收循环的可行性。有一件事我不确定,为什么当我覆盖序列化程序(我在你的ReceiveNonRebusMessageWithRabbitMq例子中使用了Utf8Fallback串行程序)时,会从队列中错误地选择消息。我会认为它会被正确解析? – jazzyuk