我正在将使用MT3和RabbitMQ的应用程序转换为使用Azure Service Bus,MassTransit未在Azure中以与使用RMQ相同的方式配置队列,并且(here)我想看看是否有其他人已经解决了这个问题具有Azure服务总线创建队列的MassTransit 3
我正在使用MT 3.4和Microsoft.ServiceBus 3.0为TokenProvider,我有一个实用程序类创建总线(以下这个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;
}
我有一个Web API控制器,它使用BU 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门户内的主题,细节面板只是挂起(所以我不能手动将其配置为手动创建的队列)
我是mi什么东西? Alastair
似乎已经做了伎俩,谢谢!我想它只是确保流程以正确的顺序启动。我专注于让应用程序的发布端工作,但是这导致没有排队的主题,副端似乎已经解决了这个问题。 – Alastair