azure - 给所有订阅者的消息
问题描述
我使用 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”方法中,我使用放弃Async 不删除消息,并且下一个接收者将收到消息。但是我在每个应用程序实例中都收到了很多内容相同的消息。如果我使用 completeAsync 方法,消息将被删除,并且没有其他人会得到它。
在不删除和不重复的情况下向 Topic 中的所有订阅者发送消息是真的吗?
解决方案
您的消息处理程序配置为自动完成传入消息。然而,在回调方法中,消息被丢弃了。这意味着它们永远不会自动完成,而是按照MaxDeliveryCount
订阅配置的次数重新传递(假设您正在从订阅中获取消息)。
处理程序代码不应放弃并让自动完成代替它,或者,禁用自动完成并.completeAsync()
在处理程序处理完传入消息后调用。
此外,自动更新定义为 1 秒。那是关闭的。这应该至少比LockDuration
period 长或根本没有指定。
在不删除和不重复的情况下向 Topic 中的所有订阅者发送消息是真的吗?
是的。您不需要重复数据删除,因为这不是发送重复的问题,而是重复处理的问题。
推荐阅读
- http - 如何使用 dart http 将二进制文件发布到服务器?
- r - 如何使用包中的其他功能更改/替换某些功能?
- python - 无法在 python 中设置日志记录级别
- sql-server - 在 sqlserver 2016 中使用 string_agg 时出错
- php - .htaccess:如果还更改了根路径,则将域重定向到 https 不起作用
- google-calendar-api - 添加会议时是否可以使用日历 API 向其他人发送短信?
- powerbi - 如何根据当前时间修改powerbi中的视图?
- spring - 如何更新 cf vcaps env 中的 postgres uri 值
- c# - C# Winforms 锚定在开始最大化时不起作用
- azure-devops - 作为 VSTS DevOps 构建的一部分,有没有办法验证包是从特定分支构建的?