2016-04-07 1 views
1

ich RabbitMQ unter Code anschließePassing URI RabbitMQ

factory.UserName = "userid"; 
factory.Password = "[email protected]"; 
factory.VirtualHost = "/filestream"; 
factory.Port = AmqpTcpEndpoint.UseDefaultPort; 
factory.HostName = "myrabbitserver"; 
return factory.CreateConnection(); 

I Verbindungseinstellungen auf das unten Format ändern wollte:

amqp://userid:[email protected]@myrabbitserver:5672/filestream 

Mein Passwort aufgrund @ Charakter hat, auf die ich m nicht in der Lage, URI

var factory = new ConnectionFactory(); 
factory.Uri = "amqp://userid:[email protected]@myrabbitserver:5672/filestream"; 

Ich am Ende jedes Attribut der Fabrik manuell liefern. Gibt es einen Weg, RabbitMQ zu sagen, dass mein Passwort @ hat, indem ich etwas wie unten tue?

factory.Uri = "amqp://userid:"[email protected]"@myrabbitserver:5672/filestream"; 

Wenn ich versuche, @ das Kennwort %40 zu ändern, wirft es einen Fehler, wenn die Verbindung

None of the specified endpoints were reachable 
Erwerb
+0

Vielleicht% 40 für das @ -Zeichen verwenden? 'factory.Uri =" amqp: // Benutzer-ID: mypass% 4025% 40myrabbitserver: 5672/filestream ";'? Alternativ rufen Sie eine UrlEncode-Methode für die Zeichenfolge auf und weisen sie 'factory.Uri' zu, z. B.' factory.Uri = HttpUtlility.UrlEncod (); '. Der zweite Ansatz hätte den Vorteil, allen Sonderzeichen im Uri zu entkommen. – Tim

+0

Ich habe das auch versucht, aber es erlaubt nicht, den Wert auf Uri zu setzen, wenn ich ein Sonderzeichen oder eine Codierung hinzufüge; – techspider

+0

Wie wäre es mit% 40 für das '@' innerhalb des Passwortes, aber nicht für '@' das ist Teil der amqp uri spec? – cantSleepNow

Antwort

1

Offensichtlich gibt es keine Möglichkeit, die @ Zeichen in das Kennwort zu verschlüsseln oder zu entkommen. Ich habe das Passwort für den Benutzer geändert, um diesen Charakter zu vermeiden, und alles hat wie erwartet funktioniert.

-1

ich Ihre Kaninchen Verbindungszeichenfolge Informationen in Ihrer web.config oder App setzen wird dringend empfohlen .config direkt neben Ihren DB-Verbindungszeichenfolgen. Sie können sie dann wie folgt verwenden:

web.config Eintrag

<connectionStrings> 
    <add name="RabbitMQ" connectionString="amqp://{username}:{password}@{server}/{vhost}" /> 
    </connectionStrings> 

C# -Code (mit Ninject als Beispiel)

Bind<IConnection>() 
    .ToMethod(ctx => 
       { 
var connectionString = configurationManager.ConnectionStrings["RabbitMQ"].ConnectionString; 
        var factory = new ConnectionFactory 
           { 
            Uri = ConnectionString, 
            RequestedHeartbeat = 15, 
            //every N seconds the server will send a heartbeat. If the connection does not receive a heartbeat within 
            //N*2 then the connection is considered dead. 
            //suggested from http://public.hudl.com/bits/archives/2013/11/11/c-rabbitmq-happy-servers/ 
            AutomaticRecoveryEnabled = true 
           }; 

        return factory.CreateConnection(); 
       }) 
    .InSingletonScope(); 

Wenn Sie es auf diese Weise nicht tun Sie brauchen der "5672/Filestream" in der Verbindungszeichenfolge. Der 5672 ist impliziert, wenn Sie die Verbindungszeichenfolge mit "ampq: //"

+0

Ich versuche nur von App.config; Ich klebte hier für eine einfache Referenz für andere; Ihre Syntax ins Config benutzt immer noch @ server/vhost; meinst du ich entferne/vhost? – techspider

+0

Ein vhost (virtueller Host) ist ein Konzept in Hase, um verschiedene Warteschlangen für verschiedene Benutzer zu trennen. Wenn Sie es nicht brauchen, können Sie es weglassen. Auch funktioniert mein Code großartig sowohl von web.config oder app.config – jhilden

+0

haben Sie @ Symbol in Ihrem Passwort? – techspider

0

beginnt. Sie müssen URLEncode auf das Symbol @ in das Kennwort eingeben.

Entsprechend Ihrer Situation, können Sie diese uri versuchen:

amqp://userid:mypass%[email protected]:5672/filestream 
-2
factory.VirtualHost = "/filestream"; //this has char '/' should change to '%2f' 

factory.Uri = "amqp://userid:mypass%[email protected]:5672/%2ffilestream"; 
+0

Was meinst du mit "warum"? –