给所有订阅者的消息

Message to all subscribers

我使用 Azure 服务总线并希望向主题中的所有订阅者发送消息。客户的应用程序是用 JavaFX 编写的,为了处理我使用下一个代码:

IMessageHandler messageHandler = new IMessageHandler() {


        // callback invoked when the message handler loop has obtained a message
        public CompletableFuture<Void> onMessageAsync(IMessage message) {
            String body = new String(message.getBody());
            System.out.println(body);
            decorator.showToastWithTitleAndBody("", body);
            return receiveClient.abandonAsync(message.getLockToken());
        }

        public void notifyException(Throwable throwable, ExceptionPhase exceptionPhase) {
            System.out.printf(exceptionPhase + "-" + throwable.getMessage());
        }
    };



    receiveClient.registerMessageHandler(
            messageHandler,
            // callback invoked when the message handler has an exception to report
            // 1 concurrent call, messages are auto-completed, auto-renew duration
            new MessageHandlerOptions(1, true, Duration.ofSeconds(1)));

在 "onMessageAsync" 方法中,我使用 abandonAsync 不删除消息,下一个接收者将收到消息。但是我在每个应用程序实例中收到了很多内容相同的消息。如果我使用 completeAsync 方法消息将被删除并且没有其他人会收到它。

不删除不重复地向Topic中的所有订阅者发送消息是真的吗?

您的消息处理程序已配置为自动完成传入消息。然而,在回调方法中消息被放弃了。这意味着它们永远不会自动完成,而是根据订阅的 MaxDeliveryCount 配置的次数重新发送(假设您正在从订阅中获取消息)。

处理程序代码应该放弃并让自动完成取代它,或者禁用自动完成并在处理程序完成后调用.completeAsync()收到的消息。

另外,自动续订定义为1秒。那是关闭。这应该至少长于 LockDuration 期限或根本不指定。

Is it real to send message to all subscribers in Topic without removing and withou duplicate?

是的。您不需要重复数据删除,因为这不是重复 sent 的问题,而是重复 processing.