Asp. net сервер основного API регистрирует события в Confluent Cloud Kafka при локальном тестировании, но не при размещении в Azure Службе приложений. - PullRequest
0 голосов
/ 01 мая 2020

У меня есть код, который мой Asp. net Core Web API использует для регистрации определенных событий на сервере Kafka, работающем в Confluent Cloud. Когда я запускаю сервер API на своем локальном компьютере, он может нормально отправлять и получать с Kafka, но когда он работает в службе приложений Azure, я получаю сообщения об ошибках «Local: Message Timed Out». Есть ли что-то в Azure сети службы приложений, которую я могу изменить, чтобы заставить сетевой трафик Kafka c работать правильно?

Вот фрагмент кода ниже:

    public class ConfluentKafkaService {
        private readonly ClientConfig clientConfig = new ClientConfig
        {
            BootstrapServers = "...",
            ClientId = Dns.GetHostName(),
            SecurityProtocol = SecurityProtocol.SaslSsl,
            SaslMechanism = SaslMechanism.Plain,
            SaslUsername = "...",
            SaslPassword = @"..."
        };

        public async Task SendDeviceEvent(DeviceEvent de) {
            var config = new ProducerConfig(clientConfig);
            string topicName = $"...";

            using var producer = new ProducerBuilder<Null, DeviceEvent>(config)
                .Build();
            try {
                await producer.ProduceAsync(topicName, new Message<Null, DeviceEvent> { Value = de });
            }
            catch (ProduceException<Null, string> e) {
                Console.WriteLine($"Error producing message: {e.Message}");
            }
        }
    }

1 Ответ

0 голосов
/ 07 мая 2020

Моя проблема с подключением была, в конечном счете, вызвана тем, что Azure Служба приложений неправильно выставляет свое хранилище доверенных сертификатов librdkafka. Я скачал cacert.pem из https://curl.haxx.se/docs/caextract.html и указал на него, установив SslCaLocation в моем ClientConfig следующим образом:

private readonly ClientConfig clientConfig = new ClientConfig
{
    BootstrapServers = "",
    ClientId = Dns.GetHostName(),
    SecurityProtocol = SecurityProtocol.SaslSsl,
    SslCaLocation = Path.Combine("assets", "cacert.pem"),
    SaslMechanism = SaslMechanism.Plain,
    SaslUsername = ""
    SaslPassword = ""
}

Для получения дополнительной информации см. Эту проблему: https://github.com/confluentinc/confluent-kafka-dotnet/issues/1112

...