送信ヘッダーが静的な場合、NServiceBus はどのように一貫性を維持していますか?
特定のメッセージの送信ヘッダーを設定すると、それはシングルトンであるため、他のすべての送信メッセージに影響を与えるということですか?
namespace NServiceBus.MessageHeaders
{
[ComVisible(false)]
public class MessageHeaderManager : IMutateOutgoingTransportMessages
{
private static IDictionary<string, string> staticOutgoingHeaders = (IDictionary<string, string>) new Dictionary<string, string>();
private IUnicastBus bus;
[ThreadStatic]
private static IDictionary<object, IDictionary<string, string>> messageHeaders;
.
.
.
}
ただし、着信ヘッダーは正しくマークされているよう[ThreadStatic]
です。
説明。
========================編集======================== =====
多くの例が以下のコードを示しているため、理解しようとしていると思います。
Bus.OutgoingHeaders["Test"] = g.ToString("N");
これは次のように追跡されます:
IDictionary<string, string> IBus.OutgoingHeaders
{
get
{
return ExtensionMethods.GetStaticOutgoingHeadersAction();
}
}
に設定されています:
内部クラス Bootstrapper : INeedInitialization, IWantToRunWhenConfigurationIsComplete { public MessageHeaderManager Manager { get; 設定; }
void INeedInitialization.Init()
{
Configure.Instance.Configurer.ConfigureComponent<MessageHeaderManager>(DependencyLifecycle.SingleInstance);
}
public void Run()
{
ExtensionMethods.GetHeaderAction = (Func<object, string, string>) ((msg, key) => this.Manager.GetHeader(msg, key));
ExtensionMethods.SetHeaderAction = (Action<object, string, string>) ((msg, key, val) => this.Manager.SetHeader(msg, key, val));
ExtensionMethods.GetStaticOutgoingHeadersAction = (Func<IDictionary<string, string>>) (() => this.Manager.GetStaticOutgoingHeaders());
}
}
そしてもちろん、上記の最後の行の GetStaticOutgoingHeaders は static フィールドになります。
次のメッセージのために、ヘッダーを設定する方法を見つけようとしています。しかし、例に従うと、すべてのメッセージのヘッダーを設定することになります。