本地NServicebus发布到Azure队列

时间:2012-04-29 17:13:36

标签: configuration azure nservicebus

我们有一个使用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=&lt;My storage account&gt;;AccountKey=&lt;My primary access key&gt;’ 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是否有一些我不知道的魔法?

4 个答案:

答案 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获取教程。

最诚挚的问候,

徐明。