将 URI 传递给 RabbitMQ

tec*_*der 8 c# rabbitmq

我使用下面的代码连接到 RabbitMQ

factory.UserName = "userid";
factory.Password = "mypass@25";
factory.VirtualHost = "/filestream";
factory.Port = AmqpTcpEndpoint.UseDefaultPort;
factory.HostName = "myrabbitserver";
return factory.CreateConnection();
Run Code Online (Sandbox Code Playgroud)

我想将连接设置更改为以下格式:

amqp://userid:mypass@25@myrabbitserver:5672/filestream
Run Code Online (Sandbox Code Playgroud)

我的密码包含@字符,因此我无法传递 URI

var factory = new ConnectionFactory();
factory.Uri = "amqp://userid:mypass@25@myrabbitserver:5672/filestream";
Run Code Online (Sandbox Code Playgroud)

我最终手动提供工厂的每个属性。有没有一种方法可以通过执行如下操作来告诉 RabbitMQ 我的密码包含 @?

factory.Uri = "amqp://userid:"mypass@25"@myrabbitserver:5672/filestream";
Run Code Online (Sandbox Code Playgroud)

如果我尝试将@密码更改为%40,则在获取连接时会抛出错误

None of the specified endpoints were reachable
Run Code Online (Sandbox Code Playgroud)

小智 8

你可以试试这个:-

 string rabbitmqconnection = $"amqp://{HttpUtility.UrlEncode("username")}: 
 {HttpUtility.UrlEncode("password")}@{"hostname"}
 /{HttpUtility.UrlEncode("/vhost")}";
Run Code Online (Sandbox Code Playgroud)

希望这能解决您的问题。


小智 6

您需要输入密码中的URLEncode符号。@

根据你的情况,你可以尝试这个uri:

amqp://userid:mypass%4025@myrabbitserver:5672/filestream
Run Code Online (Sandbox Code Playgroud)


tec*_*der 1

显然,没有办法对@密码中的字符进行编码或转义。我更改了用户的密码以避免出现此字符,一切都按预期进行。