2016-10-31 20 views
2

RabbitMQでMT3を使用するアプリケーションをAzureサービスバスに変換していますが、MassTransitではRMQと同じようにAzureでキューを設定していません。 (here)他の誰かがこの問題を解決したかどうかを知りたいのですが。MassTransit 3、Azureサービスバスでキューを作成

私はTokenProvider用のMT 3.4とMicrosoft.ServiceBus 3.0を使用しています。このexample):

public static IBus CreateBus() 
    { 
     var busControl = Bus.Factory.CreateUsingAzureServiceBus(sbc => 
     { 
      var host = sbc.Host(new Uri("sb://<sbname>.servicebus.windows.net/"), h => 
      { 
       h.OperationTimeout = TimeSpan.FromSeconds(5); 
       h.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("<KeyName>", "<Key>"); 
      }); 

      sbc.ReceiveEndpoint(host, "command_queue", ep => 
      { 
       ep.SubscribeMessageTopics = true; 
       ep.UseRetry(Retry.Incremental(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5))); 
      }); 
     }); 

     return busControl; 
    } 

私はbuを使用するWeb APIコントローラを持っていますキューにコマンドを発行するS:

[RoutePrefix("customer")] 
public class CustomerController : ApiController 
{ 
    private readonly IBus _serviceBus; 

    public CustomerController() 
    { 
     _serviceBus = AzureServiceBusUtils.CreateBus(); 
    } 

    [HttpPost, Route("register")] 
    public async Task<HttpResponseMessage> Register() 
    { 
     var command = JsonConvert.DeserializeObject<RegisterNewCustomerCommand>(Encoding.ASCII.GetString(Request.Content.ReadAsByteArrayAsync().Result)); 
     await _serviceBus.Publish(command); 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
} 

RegisterNewCustomerCommandは単純な名前、住所などのC#クラスである:私は、トピックを通じて、メッセージが作成された火災時に今

namespace AZSB.Commands 
{ 
    public class RegisterNewCustomerCommand 
    { 
     public string Name { get; } 
     ... 
     public RegisterNewCustomerCommand(...) {...} 
    } 
} 

Azure(AzSB.Commands/RegisterNewCustomerCommand)しかし、これは私がcommand_queueを期待しているようにリンクされておらず、Azureポータル内のトピックをクリックすると、詳細パネルがハングアップするだけです手動で作成したキューに手動で設定する)

Am I mi何かを何かssing? Alastair

答えて

3

受信エンドポイントにそのタイプのメッセージコンシューマを追加する必要があります。上記のコードにはコンシューマーがないため、バインドされるタイプはありません。

class YourConsumer : 
    IConsumer<RegisterNewCustomerCommand> 
{} 

cfg.ReceiveEndpoint("your_queue", x => 
{ 
    x.Consumer<YourConsumer>(); 
}); 

次に、あなたはMassTransitがキューにトピックをバインドするようになりますそのメッセージのタイプを、受け入れる消費者があるでしょう。

+0

これはトリックをやったようです、ありがとう!私はプロセスが正しい順序で起動することを保証していると思います。私は最初にアプリケーションのpub-sideを稼働させることに重点を置いていましたが、これはキューを持たないトピックになりました。サブサイドはそれを解決したようです。 – Alastair

関連する問題