2009-03-20 3 views
0

Windows 박스에 Apache Qpid Java 브로커의 M4 릴리스를 설치하고 qpid-server를 통해 기본 구성을 사용하여 시작했습니다. .bat 스크립트).RabbitMQ C# 클라이언트가 Apache Qpid와 통신하지 않습니다. Java 브로커

이제 RabbitMQ C# 클라이언트 라이브러리 (.NET 3.0 용으로 컴파일 된 버전 1.5.3)를 사용하여 대기열에 메시지를 게시하려고합니다. 내 코드는 다음과 같습니다 기본적으로

public void PublishMessage(string message) 
{ 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.Parameters.VirtualHost = "..."; 
    IProtocol protocol = Protocols.FromEnvironment(); 
    using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672)) 
    { 
     using (IModel ch = conn.CreateModel()) 
     { 
      string exchange = "..."; 
      string routingKey = "..."; 
      ch.BasicPublish(exchange, routingKey, null, Encoding.UTF8.GetBytes(message)); 
     } 
    } 
} 

, 내가 factory.Parameters.VirtualHost 및 문자열 exchangeroutingKey에 사용할 값 것을 확실 해요. 나는 다양한 조합을 시도했지만, 아무것도 작동하는 것 같다 없다 - 내가있어 가장 가까운이 (가) Qpid 서버 로그에 다음과 같은보고있다 :

Qpid 서버가 메시지를 수신하는 것처럼 보이는
2009-03-19 17:11:04,248 WARN [pool-1-thread-1] queue.IncomingMessage (IncomingMessage.java:198) - MESSAGE DISCARDED: No routes for message - Message[(HC:896033 ID:1 Ref:1)]: 1; ref count: 1 

하지만, 아무튼 그걸로 뭘 해야할지 모르겠다.

내 클라이언트 코드에서 필요한 구성 값에 대한 조언 (virtualhosts.xml의 기본 Qpid 구성을 사용하고 있음을 기억하십시오)에 많은 도움이됩니다. 가상 호스트, 교환, 대기열 및 라우팅 키에 대한보다 일반적인 정보와 Qpid가 이들을 모두 연결하는 방법도 매우 유용합니다.

내가 결국이 작업을 얻을 수 있었다, 그냥 참조를 위해, 사전에

앨런

답변

6

을 주셔서 감사합니다. 아래의 코드는 localhost 가상 호스트 (모든 기본 Qpid 브로커 구성의 일부)에있는 test.direct 교환의 대기열 테스트 대기열로 메시지를 보냅니다.

public void PublishMessage(string message) 
{ 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.Parameters.VirtualHost = "/localhost"; 
    IProtocol protocol = Protocols.AMQP_0_8_QPID; 
    using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672)) 
    { 
     using (IModel ch = conn.CreateModel()) 
     { 
      ch.ExchangeDeclare("test.direct", "direct"); 
      ch.QueueDeclare("test-queue"); 
      ch.QueueBind("test-queue", "test.direct", "TEST", false, null); 
      ch.BasicPublish("test.direct", "TEST", null, Encoding.UTF8.GetBytes(message)); 
     } 
    } 
} 
관련 문제