繁体   English   中英

使用Azure Service Bus创建队列的MassTransit 3

[英]MassTransit 3 with Azure Service Bus creating queues

我正在将使用MT3和RabbitMQ的应用程序转换为使用Azure Service Bus,而MassTransit没有在Azure中以与使用RMQ相同的方式配置队列,并且文档位于轻量级( 此处 )我想知道是否有其他人解决了这个问题

我使用MT 3.4和Microsoft.ServiceBus 3.0作为TokenProvider,我有一个创建总线的实用程序类(按照这个例子 ):

    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控制器,它使用总线将命令发布到队列:

[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只是一个简单的Name,Address等.C#类:

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

现在当我触发消息时,在Azure上创建了一个主题(AZSB.Commands / RegisterNewCustomerCommand)但是这没有像我期望的那样链接到command_queue,并且当我点击Azure中的主题时添加到它门户网站,详细信息面板挂起(因此我无法手动将其配置为手动创建的队列)

我错过了什么吗? 阿拉斯泰尔

您需要在接收端点中为该类型添加消息使用者。 上面的代码没有使用者,因此没有绑定类型。

class YourConsumer :
    IConsumer<RegisterNewCustomerCommand>
{}

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

然后,您将拥有一个接受该消息类型的使用者,这将导致MassTransit将主题绑定到队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM