问题标签 [azure-queues]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure - CloudQueueClient.ResponseReceived 事件损坏?
我正在尝试构建一个事件驱动的 Azure 队列,每次将消息放入 Azure 队列时都会触发一个事件。使用 AzureXplorer,我看到消息已正确放入 Azure 队列,但 CloudQueueClient.ResponseReceived 事件永远不会触发。我正在使用 Azure V1.4。这是我的 Worker 角色的代码:
c# - Azure 队列在 DeleteMessage 上引发异常
我正在开发一个基于 Azure 的项目以进行一些研究,并且在从 CloudQueue 实例中删除消息时遇到了一些问题。代码相当简单,所以当我尝试从队列中删除消息时为什么会引发异常,我有点困惑。
这是为队列生成数据的代码:
以下是使用队列中数据的代码:
我看不到消息如何不能存在于队列中。除了其他消费者之外,没有其他东西会改变队列。但我确信他们不能得到相同的信息(只要时间跨度没有用完),那么这是怎么发生的呢?
performance - Azure 存储队列从云中的工作角色非常慢,但不是从我的机器
我正在做一个非常简单的测试,队列指向真正的 Azure 存储,我不知道为什么,从我的计算机执行测试比将工作角色部署到天蓝色并在那里执行要快得多。我在本地测试时没有使用开发存储,我的 .cscfg 具有到真实存储的连接字符串。
存储帐户和角色位于同一个关联组中。
测试是一个 Web 角色和一个工作者角色。该页面告诉工人要做什么测试,工人做它并返回消耗的时间。此特定测试使用 32 条消息的批次测量从 Azure 队列中获取 1000 条消息需要多长时间。首先,在将应用程序部署到 Azure 并从那里运行之后,我使用 VS 测试运行调试。
结果是:
- 从我的电脑:34805.6495 毫秒。
- 来自 Azure 角色:7956828.2851 毫秒。
这可能意味着从 Azure 外部访问队列比在内部访问队列更快,这没有任何意义。
我正在这样测试:
将PreTestExecute
1000 个项目放入队列中,每个项目有 2048 个字节。
这就是ItemTest
此测试方法中发生的情况:
我没有做错什么,相同的代码,相同的连接字符串,我得到了这些结果。
任何的想法?
更新:
问题似乎出在我计算它的方式上。
我已经替换了times.Add(sw.ElapsedTicks);
fortimes.Add(sw.ElapsedMilliseconds);
和这个块:
对于这个:
现在结果是相似的,所以显然在处理精度或其他方面存在差异。我稍后会研究这个。
azure - 数据库队列和队列处理
我目前正在为基于事件的分布式系统构建参考架构,其中事件使用普通的旧表(没有 SQL Server 服务代理)存储在 SQL Server Azure 数据库中。
事件将使用将轮询队列以获取新事件消息的工作角色进行处理。
在我的研究中,我看到了许多允许多个处理器处理队列外消息的解决方案。我看到的许多模式的问题是当多个进程试图访问单个消息队列时,管理锁定等增加了复杂性。
我知道传统的队列模式是从一个队列中拉出多个处理器。但是,假设可以按任何顺序处理事件消息,是否有任何理由不在队列与其队列处理器之间创建一对一的关系并在不同队列之间进行负载平衡?
队列_1 => 处理器
_1 队列_2 => 处理器_2
此实现避免了管理跨多个处理器对队列的并发访问所需的所有管道。事件发布者可以使用任何负载平衡算法来决定将消息发布到哪个队列。
事实上,我在任何搜索中都没有看到这种实现,这让我觉得我忽略了这个设计中的一个主要缺陷。
编辑
这篇文章引发了关于使用数据库表作为队列与 MSMQ、Azure 队列等的争论。我知道有许多本机队列选项可供我使用,包括 Azure AppFabric 中的持久消息缓冲区。我已经评估了我的选项并确定 SQL Azure 表就足够了。我的问题的目的是讨论对单个队列使用多个处理器与每个队列一个处理器。
azure - Azure 辅助角色通信
我有一个初学者。它做了一些初始化。我希望其他工人等待这个启动工人。在我看来,唯一的方法是将消息放入队列中。工人将轮询队列。他们将在阅读消息后开始。有没有更好的同步方式?
azure - Azure Blob 和队列线程安全
我需要一些帮助来理解 azure CloudBlobClient、CloudQueueClient 和 CloudBlob 类中的线程安全。
我正在开发一个工作角色,其中包括多个独立的作业处理器,其中每个作业处理器从特定队列读取并写入/更新到一些可能相同的 blob 容器。
我想确保这些工作处理者不会互相踩踏。
1> 在不使用任何类型的锁的情况下,如何确保这种情况?如果我将单独的 CloudBlobClient 和 CloudQueueClient 分配给我的每个作业处理器(它们都生活在同一个进程中),是否足以说它们彼此独立并且因为每个作业处理器都使用单独的客户端实例,所以它们不会运行互相喜欢吗?
2> 在同一个作业处理器中,如果我尝试在 CloudBlobClient 上使用 Parallel.ForEach 并行调用 GetBlobReference 或 UploadText,我是否需要合并某种同步或这些方法是线程安全的?Azure 文档说它们不是,但我在网上看到的大多数示例似乎都没有在这些方法上应用任何类型的同步机制。实现这一目标的最佳方法是什么?我的意思是使用一个 CloudBlobClient 并并行调用 GetBlobReference 或 UploadText 的最佳方式?
azure - Multiple Threads in an Azure Worker Role and Storage Queue Access
I am planning to implement an azure worker role which can start multiple threads. Each thread may want to read from or write to a storage queue. For different worker role instances, race situations are not the case. But, is it safe to simultaneously access the same queue from different threads running inside the same worker role ?
azure - Azure 队列唯一消息
我想确保我不会多次将消息插入队列。有没有我可以用来强制唯一性的 ID/名称?
c# - 如何防止执行无效的工作流操作
我有一个现有的工作流引擎,可以从 Azure 队列中提取 xml 消息。XML 片段包含有关已执行的 WorkflowAction 的信息,这些信息又被传递给实际的 Workflow 类并在其中进行处理。
例如,我们在我的 Workflow 类中有以下步骤A
:
步骤 1 --> 步骤 2 --> 步骤 3
Step 2
是 的先决条件Step 3
,而Step 1
是 的要求Step 2
。
因此,如果从引擎A
收到一条名为WaitforStep1
action 的消息,它将Step 1
为该特定实例标记完成并继续执行Step 2
。
现在我的问题是:如果收到包含信息WaitforStep2
而不是 的消息WaitforStep1
,则实例将直接跳转到Step 3
而不经过Step 2
.
有没有办法防止这种情况发生?
免责声明:我是 WF 的初学者。
c# - 最大 CloudQueueMessage 有效负载大小问题
根据MSDN,消息有效负载可以扩展到 8KB(8192 字节):
AddMessage 方法将消息添加到队列的后面。一条消息的大小可能高达 8 KB。它的内容必须是可以用 UTF-8 编码的格式。
但是,当将消息添加到队列中时,我会收到消息的异常,这些消息的有效负载应该小于 8192 字节,魔术区域似乎在 6500 字节左右。我发送的数据是纯字符串,其大小从.Length
成员和从其检索的源发送的长度都得到验证(CRLF 分隔符有一个恒定的 2 字节差异)。
所以我的问题有两个:
1) 是否有任何隐藏数据附加到消息负载中,会导致其大小膨胀或导致这种奇怪的行为?(例如对整个对象应用的限制,而不仅仅是它的有效负载,但即便如此,它怎么能占每条消息的 1.5KB?)
2) 如何可靠地检查有效载荷是否确实低于 8192?
和一些额外的信息:我正在使用带有 VS 2010 Ultimate 的 Azure SDK 1.4,使用 SQLExpress(我认为是 2008 年)通过计算和存储模拟器(我还没有部署这个应用程序)运行。
还通过代码确认最大大小为 8192 字节(如果有一些额外的系统强加限制):
CloudQueueMessage:最大队列消息大小:8192