【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内不在可见的问题

Azure ,小时,格式,存储 · 浏览次数 : 21

小编点评

**问题描述:** 从 Storage Account 队列中获取数据时,在门户中,可以看到有数据,但通过消费端代码去获取的时候,就是无法获取到有效数据的情况。获取消息的代码如下: ```java // 获取消息方法 pagedIterable messages = queueClient.receiveMessages( maxMessages, // 最大获取数量 visibilityTimeout, // 可见时间 timeout, // 超时时间 context // 上下文 ); ``` **问题原因:** 第二个参数 `visibilityTimeout` 设置为 3600 秒 (1 小时),这比获取消息的实际处理时间(10 秒)更长。因此,消息在队列中被认为不可见,并不会被获取。 **解决方案:** * 将 `visibilityTimeout` 设置为与实际处理时间相同的 10 秒。 * 使用 `timeout` 参数设置获取消息的超时时间。 **修改代码:** ```java // 设置可见时间为 10 秒 visibilityTimeout = 10; // 设置超时时间为 10 秒 timeout = 10; ``` **其他建议:** * `visibilityTimeout` 的单位为秒,`timeout` 的单位为毫秒。 * `visibilityTimeout` 的默认值为 30 秒,`timeout` 的默认值为 60 秒。

正文

问题描述

在从Storage Account 队列中获取数据(Queue),在门户中,明显看见有数据,但是通过消费端代码去获取的时候,就是无法获取到有效数据的情况。获取消息的代码如下:

 

 

问题解答

经过对 receiveMessages 方法定义的查询,第二个参数,第三个参数的两个时间表示的意思为 消息在Queue中不可见的时间,和消息被处理的超时时间。如上段代码所示,当获取到消息后,如果10秒没有处理完消息,消息就会超时。但是因为第二个参数设置的是3600秒(1小时),所以它会有一个小时在Queue中不可见。 

虽然问题中消息不能再10秒中处理完是因为数据格式的问题,获取的数据格式为JSON,但是下游系统需要处理的是Based64格式。但是第二个参数3600秒的设定是不合理。

最建议的参数值为:第二(visibilityTimeout),第三(timeout ) 参数的时间一样。

 

参考资料

receiveMessages : https://learn.microsoft.com/zh-cn/java/api/com.azure.storage.queue.QueueClient?view=azure-java-stable#com-azure-storage-queue-queueclient-receivemessages(java-lang-integer-java-time-duration-java-time-duration-com-azure-core-util-context)

public PagedIterable receiveMessages(Integer maxMessages, Duration visibilityTimeout, Duration timeout, Context context)

Retrieves up to the maximum number of messages from the queue and hides them from other operations for the timeout period.

Parameters:

maxMessages - Optional. Maximum number of messages to get, if there are less messages exist in the queue than requested all the messages will be returned. If left empty only 1 message will be retrieved, the allowed range is 1 to 32 messages.
visibilityTimeout - Optional. The timeout period for how long the message is invisible in the queue. If left empty the received messages will be invisible for 30 seconds. The timeout must be between 1 second and 7 days.
timeout - An optional timeout applied to the operation. If a response is not returned before the timeout concludes a RuntimeException will be thrown.
context - Additional context that is passed through the Http pipeline during the service call.

 

与【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内不在可见的问题相似的内容:

【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内不在可见的问题

问题描述 在从Storage Account 队列中获取数据(Queue),在门户中,明显看见有数据,但是通过消费端代码去获取的时候,就是无法获取到有效数据的情况。获取消息的代码如下: 问题解答 经过对 receiveMessages 方法定义的查询,第二个参数,第三个参数的两个时间表示的意思为 消

【Azure 存储服务】Azure Storage Account 下的 Table 查询的性能调优

问题描述 Azure Storage Account 下的 Table 查询的性能调优? 问题解答 因为Azure Storage Table服务(表服务) 与常规的关系型数据库不一样(例如:MySQL, SQL Server等),他里面存储的实体(Entity,表示一条数据)不能通过添加索引来优化

【Azure 存储服务】关于中国区Azure Storage Account 存储账号服务误删除后的恢复问题

问题描述 在Azure上,如果需要恢复之前删除的存储账户(Storage Account), 有什么办法呢? 问题解答 Azure 现在推出了自主恢复已删除的存储账号的功能,具体步骤如下: 第一步: 进入Azure门户,导航到Storage Account服务(https://portal.azur

【Azure 存储服务】Azure Data Lake Storage (ADLS) Gen2 GRS Failover是否支持自动切换或者手动切换到灾备的终结点呢?

问题描述 在Azure的存储服务中,介绍灾备恢复和Storage Account故障转移的文档中,有一句话“Account failover is not supported for storage accounts with a hierarchical namespace enabled.” 而

【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)

问题描述 查看Java Storage SDK,想找一个 uploadWithResponse 的示例代码,但是通过全网搜索,结果没有任何有帮助的代码。使用最近ChatGPT来寻求答案,得到非常有格式的内容: 问:java azure storage account to use uploadWit

【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?

问题描述 如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?因为有时候出现误操作删除了某些Blob文件,想通过查看删除日志来定位被删除的文件信息。 问题解答 如果没有启用Storage Account的软删除功能,则没有办法直接查看近期有删除的Blo

【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account

问题描述 在Azure的同一数据中心,API Management访问启用了防火墙的Storage Account,并且把APIM的公网IP地址设置在白名单。但访问依旧是403 原因是: 存储帐户部署在同一区域中的服务使用专用的 Azure IP 地址进行通信。 因此,不能基于特定的 Azure 服

【Azure 存储服务】Azure Blob Storage SDK 升级失败,遇见 Unsatisfied Dependency Exception 和 Unexpected Length Exception

问题描述 在升级Java Azure Blob Storage SDK的过程中,先后遇见了 UnsatisfiedDependencyException 和 UnexpectedLengthException. 错误一:Org.springframework.beans.factory Unsati

【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)

问题描述 使用Azure Storage Table的REST API,实现根据过滤条件删除满足条件的数据,调用方法为 Delete Entity (Azure Storage) 问题实现 第一步:通过Azure Stroage 门户或者是其他工具(如:Azure Storage Explorer)

【Azure 存储服务】多设备并发往 Azure Storage Blob 的 Container 存数据是否可以

问题描述 多设备并发往 Azure Storage Blob 的 Container 存数据是否可以? 问题解答 可以! Azure Storage 是支持的并发存储数据的,Blob 可以使用乐观并发或悲观并发模型的,具体实现可以参考文档:https://docs.microsoft.com/zh-