3

私は公共交通機関を使用しており、うさぎのブローカーに接続しています。

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

ConfigurationException was unhandled が発生し続けます。

d:\BuildAgent-03\work\aa063b4295dfc097\src\MassTransit\ の MassTransit.ServiceContainer.Start() で、サービス バスの作成中に例外がスローされました {System.Collections.ListDictionaryInternal.NodeKeyValueCollection} {"バス サービスの開始に失敗しました"} ServiceContainer.cs: d:\BuildAgent-03\work\aa063b4295dfc097\src\MassTransit\ServiceBus.cs の MassTransit.ServiceBus.Start() の 83 行目: d:\ の MassTransit.Builders.ServiceBusBuilderImpl.Build() の 369 行BuildAgent-03\work\aa063b4295dfc097\src\MassTransit\Configuration\Builders\ServiceBusBuilderImpl.cs:d:\BuildAgent-03\work\aa063b4295dfc097\src\MassTransit\Configuration\ の MassTransit.BusConfigurators.ServiceBusConfiguratorImpl.CreateServiceBus() の 84 行目BusConfigurators\ServiceBusConfiguratorImpl.cs: MassTransit.ServiceBusFactory の 171 行目。New(Action`1 configure) in d:\BuildAgent-03\work\aa063b4295dfc097\src\MassTransit\Configuration\ServiceBusFactory.cs:line 44

本当に奇妙なのは、仮想ホストを指定せずに機能することですが、それらはもちろん間違った仮想ホストに行きます。

次に、rabbitMQ ライブラリをダウンロードすると、資格情報を使用して適切な仮想ホストに正常に接続されました。これが自分の資格情報を知る方法であり、仮想ホストは正常にセットアップされています。それが問題だった場合に備えて、キューを追加しました。Masstransit にバグはありますか? 私は何が間違っているのか本当にわかりません。Masstransit を使用せず、独自の軽量バージョンをプログラミングすることを検討しています。

これを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();
    }`

何か助けていただければ幸いです。または、これを機能させるために私ができることは何でも構いません。

4

1 に答える 1