2016-08-08 8 views
1

Я пытаюсь подключиться к IBM MQ 9.0 с использованием AMQP 1.0 канала из моего приложения .Net..Net AMQP клиент для IBM MQ

Портал MQ Light теперь поддерживает только клиенты Nodejs, ruby, java и python. У нас есть клиент MQ Light AMQP для .Net?

Я попытался подключиться к IBM MQ 9 с Amqpnetlite клиента

namespace AMQPNetLiteSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Start"); 
      //Address addr = new Address("10.58.139.97", 1234, "Username","password", "/", "AMQP"); 
      Address addr = new Address("amqp://10.58.139.97:1234"); 

      Connection con = new Connection(addr); 
      con.Closed += con_Closed; 
      Console.WriteLine("Created connection"); 

      Session session = new Amqp.Session(con); 
      session.Closed += session_Closed; 
      Console.WriteLine("Created session"); 

      SenderLink link = new SenderLink(session, "sender_12565455877", "/public"); 
      Console.WriteLine("Created link"); 
      var message = new Message(); 
      message.Properties = new Properties(); 
      message.Properties.Subject = "mysamplemsg"; 
      message.ApplicationProperties = new ApplicationProperties(); 
      message.ApplicationProperties["myprop"] = "Hello World"; 
      Console.WriteLine("sending message"); 
      link.Send(message); 

     } 

     static void session_Closed(AmqpObject sender, Error error) 
     { 
      Console.WriteLine("Session closed"); 
      Console.WriteLine(error.ToString()); 
     } 

     static void con_Closed(AmqpObject sender, Error error) 
     { 
      Console.WriteLine("Connection closed"); 
      Console.WriteLine(error.ToString()); 
     } 
    } 
} 

Но я не мог добиться успеха в установлении соединения. При запуске SenderLink я получаю исключение 2035 MQRC_NOT_AUTHORIZED. Однако, не изменяя аутентификацию канала в IBM MQ 9.0 Server, если я попробую его с примером MQ Light nodejs (send.js), я могу подключать и отправлять сообщения на AMQP-канал.

Просьба указать, не требуются ли какие-либо изменения в вышеуказанном коде.

Кому-нибудь удалось установить связь с IBM MQ с любыми другими .Net 1.0 AMQP Clients? Вам нужна ваша помощь здесь. Благодарю.

+0

Теоретически любой клиент AMQP должен работать. Вы можете найти информацию о причине NO_AUTHORIZED в журнале ошибок менеджера очереди MQ. (AMQERR01.LOG) –

ответ

3

Похоже, что даже если имя пользователя и пароль не настроены, для посредника MQ требуется согласование SASL для соединения. Вы можете включить SASL Anonymous на amqpnetlite следующим образом.

Address address = new Address("amqp://10.58.139.97:1234"); 
Connection connection = new Connection(address, SaslProfile.Anonymous, null, null); 
Session session = new Session(connection); 
SenderLink sender = new SenderLink(session, "sender-12345", "/public"); 
Message message = new Message("Hello"); 
message.Properties = new Properties() { MessageId = "msg", To = "q1" }; 
sender.Send(message); 
connection.Close(); 

Это также можно сделать с ConnectionFactory.

Address address = new Address("amqp://10.58.139.97:1234"); 
var factory = new ConnectionFactory(); 
factory.SASL.Profile = SaslProfile.Anonymous; 
Connection connection = await factory.CreateAsync(address); 
+0

Спасибо. SaslProfile был проблемой. Решение работало как шарм !!! – Sundar

+0

Вы должны разместить это на своем сайте GitHub с образцом кода. В текущем примере кода это требование не упоминается. –