目的地にメッセージを送信したり、イベントを発行したりするだけの場合は、トランスポートについて言及していませんか? これらの選択肢のいくつかは、ここでの答えを変えるかもしれませんが、その要点を理解する必要があります.
メッセージをキューに入れることで、NServiceBus と直接統合できます。ドキュメントを見ると、各トランスポートの下に「スクリプト」セクションがあり、メッセージを直接キューに入れる方法が示されています。MSMQ と統合する場合は、こちらのドキュメント ページを参照してください。
NSB メッセージにはヘッダーが付いています。ヘッダーの値のほとんどはオプションであり、適切なデフォルト値が付属しているため、本当に必要なのはメッセージ タイプ (メッセージ ペイロードの実際のタイプ名) だけです。Send を実行すると仮定すると、使用中のすべてのヘッダーがここに表示されます。繰り返しますが、そのすべては必要ありません。
質問に答えるには: 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 で動作します。使用するデバイスによっては、IoT がオプションになるとは思いません。
- メッセージを MSMQ に入れるには、ライブラリが必要です。
SQL トランスポートを選択した場合は、db にレコードを書き込むだけでよいため、この統合がはるかに簡単になります (ここでスクリプトを見つけることもできます)。