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

Azure Service Bus:创建指定会话接收器失败问题求助

解决Azure Service Bus会话接收器创建失败问题(Failed to create a receiver for the requested session 'session-1')

问题场景

我们已配置启用会话的Azure Service Bus Topic,发送携带会话ID为session-1的消息,且仅有一个客户端监听此Topic,但使用Azure Service Bus JavaScript SDK创建对应会话接收器时,触发错误:

Failed to create a receiver for the requested session 'session-1'

发送方代码

import { ServiceBusClient } from "@azure/service-bus";

const TOPIC_NAME = "entities-changed";

export const sendToServiceBus = async (message: { [key: string]: any }) => {
    const serviceBusClient = new ServiceBusClient(process.env.SB_ENDPOINT);

    const sender = serviceBusClient.createSender(TOPIC_NAME);

    await sender.sendMessages({
        body: message,
        sessionId: "session-1",
    });
};

接收方代码

import { ServiceBusClient } from "@azure/service-bus";

const sbClient = new ServiceBusClient(process.env.SB_ENDPOINT);

const receiver = await sbClient.acceptSession(
    RECEIVING_FROM_TOPIC_NAME,
    RECEIVING_FROM_SUBSCRIPTION_NAME,
    "session-1"
);

// 此处触发错误

const messages = await receiver.receiveMessages(1, {
    maxWaitTimeInMs: 10000,
});
await receiver.completeMessage(messages[0]);
await receiver.close();
await sbClient.close();

解决思路

  • 检查订阅的会话启用状态
    即使Topic启用了会话,对应的订阅必须同步开启会话支持。如果订阅未启用会话,消息携带的sessionId不会被订阅维护,导致无法通过指定sessionId创建接收器。需在Azure门户或ARM模板中确认目标订阅的Session enabled选项已勾选。

  • 验证消息是否投递到目标订阅
    通过Azure门户的Service Bus订阅指标(如Active messages)或Service Bus Explorer工具,确认带有session-1的消息已成功到达订阅。若消息未到达,排查发送方的连接字符串权限、Topic名称是否正确,或订阅是否存在过滤规则拦截了消息。

  • 确认接收器API参数正确性
    检查acceptSession方法的参数顺序和变量值:sbClient.acceptSession(topicName, subscriptionName, sessionId),确保RECEIVING_FROM_TOPIC_NAME和RECEIVING_FROM_SUBSCRIPTION_NAME与实际资源名称完全一致,无拼写错误。

  • 排查会话锁定或占用情况
    如果之前有客户端接受session-1会话后未正确关闭接收器,会话会处于锁定状态,新的接收器无法创建。可通过Azure门户查看订阅的会话状态,等待锁定自动过期(默认30秒)或手动释放锁定。

  • 使用Function App官方推荐的绑定方式
    若接收端运行在Azure Function App中,官方不建议手动通过SDK接收,推荐使用Service Bus绑定:
    在function.json中配置绑定并开启会话支持,会话由Function Runtime内部管理,无需手动创建接收器。示例配置:

    {
      "type": "serviceBusTrigger",
      "direction": "in",
      "name": "mySbMsg",
      "topicName": "entities-changed",
      "subscriptionName": "your-subscription-name",
      "connection": "SB_ENDPOINT",
      "isSessionsEnabled": true
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:10:43