如何将Azure EventHub接收端默认协议从AMQP修改为HTTPS
解决方案
你需要在构造EventProcessorClient前显式配置传输类型,替换原来直接传入连接字符串的构造方式即可,具体修改如下:
核心逻辑说明
EventHubsTransportType.AmqpWebSockets会将AMQP协议封装在WebSocket隧道中,通过标准443端口(HTTPS端口)传输,刚好适配你防火墙仅放行HTTPS的场景。
修改后的完整代码
using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Consumer; using Azure.Messaging.EventHubs.Processor; using Azure.Storage.Blobs; using System.Text; static async Task Main() { // 读取默认消费者组:$Default string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName; // 创建事件处理器需要用到的Blob容器客户端 storageClient = new BlobContainerClient(blobStorageConnectionString, blobContainerName); // ========== 新增/修改部分开始 ========== // 配置Event Hub连接选项,指定使用WebSocket方式传输 var connectionOptions = new EventHubConnectionOptions { TransportType = EventHubsTransportType.AmqpWebSockets }; // 先构造EventHubConnection对象,传入配置好的传输选项 await using var eventHubConnection = new EventHubConnection(ehubNamespaceConnectionString, eventHubName, connectionOptions); // ========== 新增/修改部分结束 ========== // 创建EventProcessorClient时传入构造好的eventHubConnection,替代原来直接传连接字符串和事件名的方式 processor = new EventProcessorClient(storageClient, consumerGroup, eventHubConnection); // 注册事件处理和错误处理的回调 processor.ProcessEventAsync += ProcessEventHandler; processor.ProcessErrorAsync += ProcessErrorHandler; // 启动处理 await processor.StartProcessingAsync(); // 等待30秒处理事件 await Task.Delay(TimeSpan.FromSeconds(30)); // 停止处理 await processor.StopProcessingAsync(); } static async Task ProcessEventHandler(ProcessEventArgs eventArgs) { // 将事件体内容输出到控制台 Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray())); // 在Blob存储中更新检查点,下次应用启动时仅接收新事件 await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken); }
内容的提问来源于stack exchange,提问作者Parsa
相关产品推荐
相关产品推荐

