You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java连接Azure Event Hub时遭遇连接重置错误求助

解决Azure Event Hub Java客户端连接重置错误

核心问题定位

你在Java代码中错误地混合使用了连接字符串和DefaultAzureCredential来构建客户端。当持有完整的Event Hub连接字符串时,不需要再传入DefaultAzureCredential,这会导致认证逻辑冲突,进而触发连接重置错误。而你的Node.js代码是直接用连接字符串初始化客户端,这是正确的用法。

修正后的Java代码

直接使用连接字符串构建EventHubConsumerAsyncClient,无需调用credential方法:

EventHubConsumerAsyncClient consumer = new EventHubClientBuilder()
        .connectionString(connectionString, eventHubName)
        .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
        .buildAsyncConsumerClient();

// 动态获取分区ID(避免硬编码)
consumer.getPartitionIds().subscribe(partitionIds -> {
    String partitionId = partitionIds.get(0);
    EventPosition startingPosition = EventPosition.latest();

    Disposable subscription = consumer.receive(partitionId, startingPosition)
            .subscribe(partitionEvent -> {
                PartitionContext partitionContext = partitionEvent.getPartitionContext();
                EventData event = partitionEvent.getData();

                System.out.printf("Received event from partition '%s'%n", partitionContext.getPartitionId());
                System.out.printf("Contents of event as string: '%s'%n", event.getBodyAsString());
            }, error -> {
                System.err.println("An error occurred: " + error.getMessage());
            }, () -> {
                System.out.println("Stream has ended.");
            });
});

// 保持主线程存活(异步客户端依赖主线程运行才能接收事件)
try {
    Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

额外注意事项

  • 主线程存活:异步客户端是非阻塞的,必须确保主线程不会立即退出,否则订阅会被销毁,无法接收事件。
  • 动态分区ID:尽量避免硬编码partitionId,通过getPartitionIds()动态获取更适配不同的Event Hub配置。
  • 依赖版本:确保azure-messaging-eventhubs依赖为最新稳定版,旧版本可能存在已知的连接兼容性问题。

内容的提问来源于stack exchange,提问作者nicolasSiandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:03:19