我需要一些帮助来理解azure CloudBlobClient,CloudQueueClient和CloudBlob类中的线程安全性.
我正在开发一个包含多个独立作业处理器的辅助角色,其中每个作业处理器从特定队列中读取并写入/更新到可能相同的某些blob容器.
我想确保这些工作处理器没有踩到彼此的脚趾.
1>如何在不使用任何锁的情况下确保是这种情况?如果我将单独的CloudBlobClient和CloudQueueClient分配给我的每个作业处理器(所有处理器都在同一个进程中),是否足以说它们彼此独立并且因为每个作业处理器使用单独的客户端实例,它们将无法运行互相进入?
2>在同一个作业处理器中,如果我尝试在CloudBlobClient上使用Parallel.ForEach并行调用GetBlobReference或UploadText并行,我是否需要合并某种同步或者这些方法是否安全?Azure文档说它们不是,但我在网上看到的大多数示例似乎都没有对这些方法应用任何类型的同步机制.实现这一目标的最佳方法是什么?我的意思是使用一个CloudBlobClient并在并行调用GetBlobReference或UploadText的最佳方法?
我正在尝试制作一个将消息添加到队列的C#控制台应用程序.我正在关注这里给出的Azure Service Bus示例:http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-queues/
我的程序目前什么都不做:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;
namespace testConsole
{
class Program
{
static void Main(string[] args)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我添加Microsoft.ServiceBus.dll引用时(如上面链接中所述,1-add dll reference和2-add using statements)我在编译时遇到错误:" 类型或命名空间名称'ServiceBus'在名称空间"Microsoft"中不存在(您是否缺少程序集引用?) "
我甚至使用反射器工具查看了Microsoft.ServiceBus.dll,它确实包含Microsoft.ServiceBus命名空间.dll的版本号为1.6.0.0,运行时版本为v4.0.30319.
任何帮助赞赏.
-pom-
使用任何正常的Azure队列,我弹出一条消息,然后做一些工作.在完成工作之前,我不想删除该消息.
多久该消息保持隐藏它被视为失败,是由前可见再次在队列中?
例如.
var message = myQueue.GetMessage();
// Do Work ..
myQueue.DeleteMessage();
Run Code Online (Sandbox Code Playgroud)
我的工作可能需要30秒或者其他什么.或者如果花了1分钟或2分钟会发生什么?
我基本上不希望在工作完成之前再次提供消息,让另一个工作人员将其从队列中弹出..即使这个工作者仍在工作.
我们可以设置'隐藏'时间吗?
我知道(阅读msdn文档[此处])Windows Azure存储队列对邮件使用基于租约的独占访问策略,Azure Service Bus Queues使用基于锁的存储队列.在两者中我都可以设置锁定/租用的最大持续时间.那么,这两种方法之间最重要的区别是什么?有人可以提供明确/简短的例子吗?谢谢.
1 https://msdn.microsoft.com/en-us/library/azure/hh767287.aspx
azure azure-storage azure-queues azureservicebus azure-servicebus-queues
我正在使用Azure Cloud Service和web api开发应用程序.我想允许创建咨询会话的用户能够更改该会话的价格,但是我想允许所有用户在新价格影响当前注册的所有成员的价格之前30天离开会话.会话.我的第一个想法是使用队列存储并设置30天时间限制的可见性超时,但这似乎可以随着时间的推移真正快速增长队列,特别是如果消息不应该运行30天; 更不用说订购问题了.我也在关注任务调度程序,但会话定价变化不是一个反复出现的概念,而是更随机的.队列概念是一个好方法还是有更好,更有效的方法来实现这一目标?
我想弄清楚如何监听队列中的事件(尤其是入队事件)。
假设我有一个控制台应用程序和一个服务总线队列/主题,我如何连接到队列并等待新消息?
我试图在没有While(true)持续轮询的情况下实现这一点,我试图以一种非常听话的方式来做更多的事情,比如保持连接到队列的套接字。
我不想使用轮询的原因是我知道它会用请求淹没服务器,我需要一个可以在大负载下工作的解决方案。
谢谢你。
为了简单起见,我给出了非常基本的示例,但我的实际情况要复杂一些:
我有使用服务总线队列将需要处理的消息发送到工作角色的 Web API。
我需要以某种方式知道 Worker 何时处理了消息。我希望 Worker 向队列发送一条消息,提醒 Web API 已处理该消息,但现在我需要让 Web API“坐下”并等待 Worker 的回复,这引出了我的问题:
如何在不进行轮询的情况下不断地收听队列(因为有很多实例会进行池化,并且会创建很多可能最好避免的请求。
servicebus azure azure-queues azureservicebus azure-servicebus-queues
几个月前(当我不熟悉Azure Queues和SDK工具时)我用Google搜索"我该怎么做"和"我该怎么做"......这就是我今天所处的位置:
我正在使用QueueClient(Microsoft.ServiceBus.Messaging - Microsoft.ServiceBus.dll)从Azure队列接收邮件.
在我的同一个程序中,我也使用MessageSender(来自相同的命名空间和dll)将消息发送到Azure队列.
我的程序必须跟踪a Dictionary<string, QueueClient>和a Dictionary<string, MessageSender>- 这比它应该更复杂.
现在我对Azure SDK更熟悉了......我意识到这个QueueClient类可以发送和接收 ......那么为什么我要跟踪2个对象,而第一个可以同时执行这两个对象?
有没有理由使用MessageSender该类而不是QueueClient类?
如果我需要发送和接收,我不应该只使用该QueueClient课程吗?
我知道我可以使用 clienttrackid 并将其设置在标题中,但我不确定应用程序洞察/azure 处理什么以及我需要手动处理什么。情况就是这样(我希望将来自 ServiceA、FunctionA、ServiceB 的日志视为相关事件):
我是否需要将跟踪 ID 添加到我添加到队列中的消息中?还是一切都是自动处理的?
谢谢拉西
azure azure-queues azure-application-insights azure-web-app-service azure-functions
我有一个与队列关联的 azure 队列触发器,我想确保触发器一次只读取和执行一条消息。因此,当消息被执行(成功与否)时,它会处理下一条消息。
正在发生的事情是队列执行一条消息,但它开始执行另一条消息。我的主机.json:
"queues": {
"maxPollingInterval": 20000,
"visibilityTimeout": "00:01:00",
"batchSize": 1,
"maxDequeueCount": 5,
"newBatchThreshold": 1
}Run Code Online (Sandbox Code Playgroud)
以下来自 MS 链接的说明:
如果要避免在一个队列上接收的消息并行执行,可以将 batchSize 设置为 1
所以预计一次只运行一条消息(我正在使用消费计划)。
这很关键,因为我需要确保它当时只处理一条消息。
有什么设置可以更改吗?
或者队列触发器不是解决这个需求的好选择?