公共交通 - 兔子MQ虚拟主机

本文关键字:兔子 MQ 虚拟主机 | 更新日期: 2023-09-27 18:31:18

我正在使用公共交通并连接到我的兔子经纪人。

 string uri1 = @"rabbitmq://myusername:mypassword@myip/myvirtualhost/myqueue";

我一直得到一个配置异常未处理。

创建服务总线期间引发异常 {System.Collections.ListDictionaryInternal.NodeKeyValueCollection} {"无法启动总线服务"} 在 MassTransit.ServiceContainer.Start() in d:''BuildAgent-03''work''aa063b4295dfc097''src''MassTransit''ServiceContainer.cs:line 83 at MassTransit.ServiceBus.Start() in d:''BuildAgent-03''work''aa063b4295dfc097''src''MassTransit''ServiceBus.cs:line 369 at MassTransit.Builders.ServiceBusBuilderImpl.Build() in d:''BuildAgent-03''work''aa063b4295dfc097''src''MassTransit''Configuration''Builders''ServiceBusBuilderImpl.cs:line 84 在 MassTransit.BusConfigurators.ServiceBusConfiguratorImpl.CreateServiceBus() 在 d:''BuildAgent-03''work''aa063b4295dfc097''src''MassTransit''Configuration''BusConfigurators''ServiceBusConfiguratorImpl.cs:line 171 at MassTransit.ServiceBusFactory.New(Action'1 configure) in d:''BuildAgent-03''work''aa063b4295dfc097''src''MassTransit''Configuration''ServiceBusFactory.cs:line 44

真正奇怪的是,它无需指定虚拟主机即可工作,但它们偏离了错误的虚拟主机。

然后我下载了 rabbitMQ 库,它使用我的凭据很好地连接到正确的虚拟主机。这就是我知道我的凭据的方式,虚拟主机设置良好。我什至添加了一个队列,以防出现问题。 公共交通中有什么错误吗?我真的看不出我做错了什么。我正在考虑不使用公共交通并编写自己的轻量级版本。

我什至将其复制粘贴到我的解决方案 https://github.com/MassTransit/MassTransit/blob/v2.7.2/src/Transports/MassTransit.Transports.RabbitMq/RabbitMqEndpointAddress.cs#L167 以检查它是否正确修剪了虚拟主机,并且确实如此。我真的很困惑。' static readonly Regex regex = new Regex(@"^[A-Za-z0-9-.:]+$");

    public static RabbitMqEndpointAddress Parse(Uri address)
    {
        Guard.AgainstNull(address, "address");
        if (string.Compare("rabbitmq", address.Scheme, true) != 0)
            throw new RabbitMqAddressException("The invalid scheme was specified: " + address.Scheme ?? "(null)");
        var connectionFactory = new ConnectionFactory
        {
            HostName = address.Host,
            UserName = "",
            Password = "",
        };
        if (address.IsDefaultPort)
            connectionFactory.Port = 5672;
        else if (!address.IsDefaultPort)
            connectionFactory.Port = address.Port;
        if (!address.UserInfo.IsEmpty())
        {
            if (address.UserInfo.Contains(":"))
            {
                string[] parts = address.UserInfo.Split(':');
                connectionFactory.UserName = parts[0];
                connectionFactory.Password = parts[1];
            }
            else
                connectionFactory.UserName = address.UserInfo;
        }
        string name = address.AbsolutePath.Substring(1);
        string[] pathSegments = name.Split('/');
        if (pathSegments.Length == 2)
        {
            connectionFactory.VirtualHost = pathSegments[0];
            name = pathSegments[1];
        }
        ushort heartbeat = address.Query.GetValueFromQueryString("heartbeat", connectionFactory.RequestedHeartbeat);
        connectionFactory.RequestedHeartbeat = heartbeat;
       VerifyQueueOrExchangeNameIsLegal(name);
        return new RabbitMqEndpointAddress(address, connectionFactory, name);
    }
    static void VerifyQueueOrExchangeNameIsLegal(string path)
    {
        Match match = _regex.Match(path);
        if (!match.Success)
            throw new RabbitMqAddressException(FormatErrorMsg);
    }
    const string FormatErrorMsg =
      "The path can be empty, or a sequence of these characters: letters, digits, hyphen, underscore, period, or colon.";

    private static void Main(string[] args)
    {
        string uri1 = @"rabbitmq://username:password@mydomain.co.za/vhost/queue";
        IServiceBus serviceBus;
        var result =  Parse(new Uri(uri1));
        serviceBus = ServiceBusFactory.New(sbc =>
        {
            sbc.UseRabbitMq();
            sbc.ReceiveFrom(uri1);
            sbc.Subscribe(c => c.Consumer<SendEmailConsumer>());
        });
        IPublish publishMessage = new MassTransitPublisher(uri1);
        publishMessage.Publish(new SendEmail
            {
                EmailFrom = "*@8.co.za",
                EmailTo = "*@*.co.za",
                Subject = "hello",
                Body = "hello"
            });
        Console.ReadKey();

        JobRunner jobRunner = new JobRunner();
        jobRunner.Start();
        Console.ReadKey();
    }`

任何帮助将不胜感激,或者我可以尝试使其工作的任何其他内容。

公共交通 - 兔子MQ虚拟主机

您使用的是哪个版本的公共交通?

我们删除了从 Uri 声明用户名和密码的功能(因此它不会出现在日志中),您必须通过 API 执行此操作。

请参阅 https://groups.google.com/d/msg/masstransit-discuss/4m5Vf04oRWM/hujvVh1HSdwJ。

sbc.UseRabbitMq(x => 
                x.ConfigureHost("rabbitmq://yourhost/yourvhost/yourqueue", 
                x=> x.UserName, 
                x.Password))