【问题标题】:Can IllegalStateException be thrown by ServiceBusSenderClient.sendMessage() unless we close ServiceBusSenderClient?除非我们关闭 ServiceBusSenderClient,否则 ServiceBusSenderClient.sendMessage() 是否会引发 IllegalStateException?
【发布时间】:2021-10-25 07:42:38
【问题描述】:

我正在使用 ServiceBusSenderClient 向 Azure 服务总线发送消息。根据sdk docsServiceBusSenderClient.sendMessage() 将抛出NullPointerExceptionAmqpExceptionServiceBusExceptionIllegalStateException

我可以保证我的代码永远不会创建具有空值的 serviceBusMessage,因此我可以忽略 NullPointerExceptionAmqpExceptionServiceBusException 将在那里,我现在将其记录在下面的代码段中。

但我不确定它是否会抛出 IllegalStateException,除非我关闭 ServiceBusSenderClient。

        try {
            serviceBusSenderClient.sendMessage(serviceBusMessage);
        } catch (ServiceBusException e) {
            log.error("Message could not be sent.");
        } catch (AmqpException e) {
            log.error("Message is too large.");
        } catch (IllegalStateException e) {
            log.error("Sender client is disposed.");
        }

【问题讨论】:

    标签: azure azureservicebus illegalstateexception servicebus


    【解决方案1】:

    根据code,它会抛出IllegalStateException

    如果发件人已经被释放。

    如果您想确保在它被释放后不使用它,请使用范围来确保它被释放:

    using (ServiceBusSenderClient serviceBusSenderClient = new ServiceBusSenderClient())
    {
      serviceBusSenderClient.sendMessage(serviceBusMessage);
      ...
    }
    // serviceBusSenderClient out of scope and disposed
    

    如果您不限定它的范围,则取决于垃圾收集器在处理它时,或者您可以自己处理它,但现代方法是使用using

    【讨论】:

    • 手动处理发送方客户端的一种方法是使用senderClient.close() 关闭发送方客户端。我想知道发件人客户端是否会被处理,除非我深思熟虑地处理它。
    • 我已更新答案以反映您的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2015-02-21
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多