0

我有一些代码,我的 Asp.net Core Web API 使用这些代码将某些事件记录到在 Confluent Cloud 中运行的 Kafka 服务器。当我在本地机器上运行 API 服务器时,它可以很好地使用 Kafka 发送和接收,但是当它在 Azure 应用服务上运行时,我收到“本地:消息超时”错误。我可以修改 Azure App Service 网络以使 Kafka 网络流量正确流动吗?

这是下面的代码片段:

    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}");
            }
        }
    }
4

1 回答 1

0

我的连接问题最终是因为 Azure App Service 没有正确地将其受信任的证书存储区公开给 librdkafka。我从https://curl.haxx.se/docs/caextract.html下载了 cacert.pem并通过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

于 2020-05-07T18:16:13.253 回答