Подключение к концентратору сообщений IBM с помощью C# и Confluent

Я пытаюсь создать приложения производителя и потребителя, используя концентратор сообщений IBM. Для производителя я использую следующий код:

var config = new Dictionary<string, object> {
                { "bootstrap.servers", brokerList },
                { "group.id", "simple-csharp-producer" },
                { "client.id", "some string for id such as FR45fHth..." },
                {"api.version.request","true" },
                {"sasl.mechanisms","PLAIN" },
                {"sasl.username","the first 16 charachters of the client.id" },
                {"sasl.password","the other characters left" }
            };

            using (var producer = new Producer<Null, string>(config, null, new StringSerializer(Encoding.UTF8)))
            {
              ....
            }

для потребителя я использую аналогичные свойства конфигурации.

остальная часть кода для потребителя:

using (var consumer = new Consumer<Null, string>(config, null, new StringDeserializer(Encoding.UTF8)))
            {
                consumer.Assign(new List<TopicPartitionOffset> { new TopicPartitionOffset(topics, 0, 0) });

                while (true)
                {
                    Message<Null, string> msg;
                    if (consumer.Consume(out msg, TimeSpan.FromSeconds(1)))
                    {
                        Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {msg.Value}");
                    }
                }
            }

и для производителя:

using (var producer = new Producer<Null, string>(config, null, new StringSerializer(Encoding.UTF8)))
            {
                Console.WriteLine($"{producer.Name} producing on {topicName}. q to exit.");

                string text;
                while ((text = Console.ReadLine()) != "q")
                {
                    var deliveryReport = producer.ProduceAsync(topicName, null, text);
                    deliveryReport.ContinueWith(task =>
                    {
                        Console.WriteLine($"Partition: {task.Result.Partition}, Offset: {task.Result.Offset}");
                    });
                }

                // Tasks are not waited on synchronously (ContinueWith is not synchronous),
                // so it's possible they may still in progress here.
                producer.Flush(Convert.ToInt32(TimeSpan.FromSeconds(10)));

Во всяком случае, это не сработало, нет никаких признаков отправки или получения чего-либо... чего не хватает? или что я могу использовать для его работы?

Журналы, которые я получаю:

*sasl_ssl://kafka03-prod02.messagehub.services.eu-gb.bluemix.net:9093/bootstrap: не удалось инициализировать аутентификацию SASL: механизм SASL «PLAIN» не поддерживается на платформе

*1/1 брокеры не работают


person israel altar    schedule 04.07.2017    source источник


Ответы (2)


Я сам не использовал клиент Confluent C#, но, насколько я знаю, он основан на librdkakfa, так что для подключения к Message Hub вам как минимум потребуется еще несколько конфигураций:

  • security.protocol установлен на SASL_SSL
  • ssl.ca.location укажите путь к вашим сертификатам ЦС
person Mickael Maison    schedule 04.07.2017

Настройки, которые выложил Микаэль, верны.

Однако, если вы работаете в Windows, чтобы получить поддержку SASL/SSL (требуется для Message Hub), вам нужна librdkafka 0.11.

С librdkafka 0.9.5 вы не можете подключиться к MH из Windows

person Edoardo Comar    schedule 04.07.2017
comment
см. также этот пост - чтобы узнать, как установить параметр пути сертификата 44821846#44821846" title="Связь концентратора сообщений IBM с слитным API c Sharp">stackoverflow.com/questions/44820430/ - person Edoardo Comar; 04.07.2017
comment
вставьте свои журналы (возможно, с отладкой = все), чтобы мы могли увидеть, является ли это проблемой подключения или аутентификации - person Edoardo Comar; 05.07.2017
comment
это сообщение в журналах SASL mechanism "PLAIN" not supported on platform говорит о том, что librdkafka не была собрана с поддержкой SASL. Как было сказано, для Windows нужна librdkafka 0.11, для Linux необходимо установить libsasl2-dev - person Edoardo Comar; 10.07.2017
comment
Да я не слежу... а они? - person israel altar; 10.07.2017
comment
Вы на какой ОС? чтобы иметь поддержку SASL: Если Windows - вам нужна librdkafka 0.11 Если Linux - вам нужна libsas2-dev Если mac - вам нужно brew openssl и собрать его файлы заголовков/lib - person Edoardo Comar; 12.07.2017
comment
Я использую Windows и использую linrdkafka 0.11. - person israel altar; 12.07.2017