如果您只是想向目的地发送消息或发布事件,您没有提到您的传输是什么?其中一些选择可能会改变这里的答案,但您应该了解它的要点。
您可以通过将消息放入队列来直接与 NServiceBus 集成。如果您查看文档,您会看到每个传输下方都有“脚本”部分,它向您展示了如何将消息直接放入队列中。如果您想与 MSMQ 集成,您可以在此处找到文档页面。
NSB 消息带有Headers。标头中的大多数值都是可选的,并且它们带有合理的默认值,因此您真正需要的只是消息类型(消息有效负载的实际类型名称)。假设您要进行发送,您可以在此处查看所有正在使用的标头。同样,您不需要所有这些。
要回答您的问题:要从您的 C++ 代码与 NSB 集成,您可以将此 C# 代码转换为 C++,这就是您所需要的:
public static void SendMessage(string queuePath, string messageBody, List<HeaderInfo> headers)
{
using (var scope = new TransactionScope())
{
using (var queue = new MessageQueue(queuePath))
using (Message message = new Message())
{
message.BodyStream = new MemoryStream(Encoding.UTF8.GetBytes(messageBody));
message.Extension = CreateHeaders(headers);
queue.Send(message, MessageQueueTransactionType.Automatic);
}
scope.Complete();
}
}
public static byte[] CreateHeaders(List<HeaderInfo> headerInfos)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<HeaderInfo>));
using (var stream = new MemoryStream())
{
serializer.Serialize(stream, headerInfos);
return stream.ToArray();
}
}
public class HeaderInfo
{
public string Key { get; set; }
public string Value { get; set; }
}
注意事项:
- MSMQ 与 TransactionScope 一起使用。我不认为物联网是一种选择,具体取决于您使用的设备。
- 您仍然需要一个库来将消息放入 MSMQ。
如果您选择了 SQL 传输,它会使这种集成变得更加容易,因为您所要做的就是在数据库中写入一条记录(您也可以在此处找到一个脚本)。