Asp.net 核心 API 服务器在本地测试时将事件记录到 Confluent Cloud Kafka,但在 Azure 应用服务上托管时不会
Asp.net core API server logs events to Confluent Cloud Kafka when testing locally, but not when hosting on Azure App Service
我的 Asp.net 核心 Web API 使用一些代码将某些事件记录到 Confluent Cloud 中的 Kafka 服务器 运行ning。当我 运行 我本地机器上的 API 服务器时,它可以很好地使用 Kafka 发送和接收,但是当它在 Azure 应用服务上 运行 时,我收到 "Local: Message Timed Out" 错误。我可以修改 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}");
}
}
}
我的连接问题最终是因为 Azure 应用服务没有将其受信任的证书存储正确地公开给 librdkafka。我从 https://curl.haxx.se/docs/caextract.html 下载 cacert.pem 并通过在我的 ClientConfig 中设置 SslCaLocation
指向它,如下所示:
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
我的 Asp.net 核心 Web API 使用一些代码将某些事件记录到 Confluent Cloud 中的 Kafka 服务器 运行ning。当我 运行 我本地机器上的 API 服务器时,它可以很好地使用 Kafka 发送和接收,但是当它在 Azure 应用服务上 运行 时,我收到 "Local: Message Timed Out" 错误。我可以修改 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}");
}
}
}
我的连接问题最终是因为 Azure 应用服务没有将其受信任的证书存储正确地公开给 librdkafka。我从 https://curl.haxx.se/docs/caextract.html 下载 cacert.pem 并通过在我的 ClientConfig 中设置 SslCaLocation
指向它,如下所示:
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