我们有一个使用NServicebus的内部Web应用程序,我们希望将队列移动到azure(作为更大迁移路径的一部分,完全基于云)。我正在努力建立一个POC,但似乎无法让它工作
我有以下配置:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
<section name="AzureQueueConfig" type="NServiceBus.Config.AzureQueueConfig, NServiceBus.Azure"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core"/>
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
<AzureQueueConfig QueueName="timeoutmanager"
ConnectionString="DefaultEndpointsProtocol=https;AccountName=<My storage account>;AccountKey=<My primary access key>"/>
<UnicastBusConfig TimeoutManagerAddress="timeoutmanager">
<MessageEndpointMappings>
<add Messages="TechFu.Services.Bus.Messages.Publishing.CMS.SitePagePublishMessage, TechFu.Services.Bus.Messages" Endpoint="sitepagepublish" />
</MessageEndpointMappings>
在我的应用程序中,我将总线配置为:
Configure.WithWeb()
.StructureMapBuilder()
.InMemorySubscriptionStorage()
.AzureMessageQueue()
.JsonSerializer()
.UnicastBus()
.LoadMessageHandlers()
.IsTransactional(true)
.CreateBus()
.Start();
当我尝试发布到队列时,我收到以下消息:
The destination queue 'sitepagepublish@ DefaultEndpointsProtocol=https;AccountName=<My storage account>;AccountKey=<My primary access key>’ could not be found. You may have misconfigured the destination for this kind of message (TechFu.Services.Bus.Messages.Publishing.CMS.SitePagePublishMessage) in the MessageEndpointMappings of the UnicastBusConfig section in your configuration file. It may also be the case that the given queue just hasn't been created yet, or has been deleted.
我有点不知所措,我已经尝试了几种不同的样本,我已经在网上找到了,但我觉得我缺乏天蓝色的知识正在阻碍。我从这个问题中删除了大部分配置:nservicebus on-premise host using azure Queue是否有一些我不知道的魔法?
答案 0 :(得分:2)
目标队列是否存在? NServiceBus默认只创建源队列,因此如果目标不存在,它将不会为您创建它。
答案 1 :(得分:2)
我认为这不会起作用,因为订阅消息无法在两个主机之间交换。
更好地使用NServiceBus的Gateway概念,它将在不同站点之间分发消息。
答案 2 :(得分:0)
您可以尝试从配置文件中删除对 MsmqTransportConfig 的任何引用吗? (当使用Azure队列时,您实际上正在替换MSMQ传输)
答案 3 :(得分:0)
我不熟悉NServicebus。但是Windows Azure有一个内置的Service Bus,它可以自然地与队列集成。您可以参考http://msdn.microsoft.com/en-us/WAZPlatformTrainingCourse_ServiceBusMessaging获取教程。
最诚挚的问候,
徐明。