我正在使用nServivceBus將消息保留到消息隊列中。我跑了runmefirst.bat。消息隊列服務已成功安裝。當我運行Web應用程序時,私有隊列被成功創建。nServiceBus不是持久化到MessageQueue
當我發送消息時,它沒有顯示出來在消息隊列。沒有錯誤被拋出。我很難過。
設置
Configure config = Configure.WithWeb();
config
.StructureMapBuilder(Container)
.MsmqSubscriptionStorage()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.XmlSerializer()
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
配置
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<MsmqSubscriptionStorageConfig Queue="subscribe" />
<MsmqTransportConfig InputQueue="subscribe" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Momntz" Endpoint="subscribe"/>
</MessageEndpointMappings>
</UnicastBusConfig>
代碼
private readonly IDocumentDatabase _database;
private readonly IBus _bus;
/// <summary>
/// Initializes a new instance of the <see cref="HomeIndexCommandHandler"/> class.
/// </summary>
/// <param name="database">The database.</param>
/// <param name="bus"></param>
public CreateUserCommandHandler(IDatabases database, IBus bus)
{
_database = database.RavenDb;
_bus = bus;
}
/// <summary>
/// Executes the specified command.
/// </summary>
/// <param name="command">The command.</param>
public void Execute(CreateUserCommand command)
{
var user = Mapper.DynamicMap<CreateUserCommand, User>(command);
user.AccountStatus = UserAccountStatus.Active;
var foundUser = CheckForDuplicateUsername(user);
if(foundUser != null)
{
throw new DuplicateUsernameException(string.Format("Username '{0}' already exists.", user.Username));
}
_database.Add(user);
var denormalizeMessage = Mapper.DynamicMap<User, UserDenormalizeMessage>(user);
_bus.Send(denormalizeMessage);
}
更新
這樣做的目的是爲網站將消息發送到消息隊列和處理消息的服務。這很簡單。我不在尋找客戶端和服務器之間的響應或通信。這是一種溝通方式。
我也有點茫然,你說你是*「使用nServivceBus堅持一個消息到消息隊列」 *。消息持續到MSMQ隊列是一個傳輸級別的細節,而不是結束遊戲。如果你告訴我們你實際想要達到的目標,那麼有用的是什麼。 – 2011-12-22 09:13:06