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

Azure Service Bus中ServiceBusSenderClient与ServiceBusSenderAsyncClient的差异

Azure Service Bus中ServiceBusSenderClient与ServiceBusSenderAsyncClient的区别及代码示例差异

核心区别

  • 编程模型:

    • ServiceBusSenderClient是同步客户端,所有消息发送操作均为阻塞式——调用发送方法后,当前线程会等待操作完成(成功或失败)才继续执行后续代码。
    • ServiceBusSenderAsyncClient是异步客户端,基于非阻塞IO模型,发送操作返回CompletableFuture(Java生态),不会阻塞当前线程,适合高并发场景下提升资源利用率。
  • 性能与线程利用:

    • 同步客户端每次发送都会占用线程直到操作结束,高吞吐量场景下易导致线程池资源耗尽,限制系统处理能力。
    • 异步客户端通过事件循环处理多个并发请求,单个线程可承载大量异步任务,资源利用率更高,能支撑更大的消息吞吐量。
  • API调用方式:

    • 同步客户端的方法为同步签名,比如sendMessage(ServiceBusMessage message)直接执行并返回结果/抛出异常。
    • 异步客户端的方法返回异步结果容器,需要通过thenAccept()、exceptionally()等回调处理成功或失败逻辑,或者在异步方法中使用await等待结果。

代码示例差异

示例1:构建同步发送客户端

ServiceBusSenderClient sender = new ServiceBusClientBuilder()
    .connectionString("<< CONNECTION STRING FOR THE SERVICE BUS NAMESPACE >>")
    .sender()
    .queueName("<< QUEUE NAME >>")
    .buildClient();

这段代码通过buildClient()创建同步客户端实例,后续调用发送方法时会阻塞线程:

// 阻塞式发送,直到完成或失败
sender.sendMessage(new ServiceBusMessage("同步发送的消息"));

适合简单场景,代码逻辑直观,无需处理异步回调。

示例2:构建异步发送客户端

ServiceBusSenderAsyncClient sender = new ServiceBusClientBuilder()
    .connectionString("<< CONNECTION STRING FOR THE SERVICE BUS NAMESPACE >>")
    .sender()
    .queueName("<< QUEUE NAME >>")
    .buildAsyncClient();

这段代码通过buildAsyncClient()创建异步客户端实例,发送操作需要处理异步结果:

// 非阻塞发送,通过回调处理结果
sender.sendMessage(new ServiceBusMessage("异步发送的消息"))
    .thenRun(() -> System.out.println("消息发送成功"))
    .exceptionally(ex -> {
        System.err.println("发送失败:" + ex.getMessage());
        return null;
    });

或者在异步方法中使用await等待完成:

// 异步方法内等待发送完成
await sender.sendMessage(new ServiceBusMessage("异步发送的消息"));

适合高并发、需要避免线程阻塞的场景,能更好地与其他异步组件集成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:18