标签: azure-queues

(使用Azure队列)的最佳实践

我正处于设计基于Azure的应用程序的早期阶段.考虑到我可能期望的需求变化,吸引我进入Azure的一个原因是可扩展性.因此,我试图保持松散耦合,以便我可以在需要时添加实例.

我在构建Azure应用程序时看到的建议包括将Web角色逻辑保持在最低限度,并在工作者角色中完成处理,使用队列进行通信以及某些后端存储(如SQL Azure或Azure表).这对我来说似乎是一个好主意,因为我可以毫无问题地扩展应用程序的任一部分或两部分.但是我很好奇是否有任何最佳实践(或者如果有人有任何经验),最好让网络角色直接与数据存储对话而不是通过队列发送数据?

我正在考虑从web角色进行简单插入的情况 - 我可以将其设置为消息,将其发送到队列中,并让工作者角色拾取并执行插入,它似乎很多双重处理.但是我也很欣赏,从长远来看,这可能是更好的情况,万一web角色不堪重负或者插件需要更复杂的逻辑.

我意识到这可能是一个案例,答案是"它完全取决于情况,检查你的绩效指标" - 但如果有人有任何想法,我会非常感激!

queue azure azure-queues

5
推荐指数
2
解决办法
2405
查看次数

管理大量Azure队列

我的部分申请包括"聊天"系统.我为每个用户维护一个队列.发送给用户的消息被放入队列中,用户的软件定期轮询休息服务以获取新消息,此时队列被抽取消息,然后返回给用户.

该系统非常简单,运行良好,并且我需要它完成所有工作.

我的问题是; 我有数百个(很快就有数千个)队列混乱了应用程序的队列列表.

我还有其他的队列,而且令我不安的是,我不能像blob存储中的东西一样"组织"它们.

我是否遗漏了某些内容,或者我应该忽略队列列表,并依赖于这样一个事实:当用户来来往往时,我正在正确管理队列的创建和删除?

azure azure-storage azure-queues

5
推荐指数
1
解决办法
194
查看次数

Azure Queue唯一消息

我想确保我没有多次向队列插入消息.我可以使用任何ID /名称来强制执行唯一性吗?

queue azure azure-queues

5
推荐指数
2
解决办法
1820
查看次数

限制Azure存储队列中的邮件进程尝试次数

我需要跟踪在天蓝色存储队列中处理消息的失败尝试次数,并在N次尝试失败后删除消息.

我已搜查,但没有发现,这是否automaticaly并想知道是否有比在存储表使用计数器等方式任何特殊的性质.

azure azure-storage azure-queues

5
推荐指数
1
解决办法
1956
查看次数

在没有循环的情况下从队列接收多条消息

我正在使用Azure Service Bus来管理带有webrole和workerrole的消息.

我需要知道如何在不使用循环的情况下立即从队列中获取多条消息.

servicebus azure azure-worker-roles azure-queues azureservicebus

5
推荐指数
1
解决办法
4806
查看次数

Azure存储浏览客户端软件选项

据我所知,这些是唯一可用于浏览Azure表存储,队列和Blob的客户端:

那里有其他客户我不知道吗?

azure azure-storage azure-storage-blobs azure-table-storage azure-queues

5
推荐指数
1
解决办法
1320
查看次数

使用Azure Service Bus进行基于消息类型的路由

使用Azure Service Bus实现基于强类型消息的路由的最简单方法是什么.

假设我们只有一个消费者并且正在使用服务总线队列,是否更容易为每种消息类型创建队列(在我们的例子中是事件消息),或者只是为所有消息创建一个队列并处理消费者的路由?

如果我们有多个消费者并且想要发布pub-sub消息,那么我们是应该为每种消息类型创建一个主题,为每个消息类型创建一个订阅,还是只为所有消息创建一个主题,然后在消费者上处理路由?

messaging servicebus azure azure-queues azureservicebus

5
推荐指数
1
解决办法
973
查看次数

QueueTrigger属性可见性超时

如果我使用Azure.Storage.Queue从队列中获取消息

queue.GetMessage(TimeSpan.FromMinutes(20));
Run Code Online (Sandbox Code Playgroud)

我可以设置可见性超时,但是当尝试使用Azure.WebJobs(SDK 0.4.0-beta)属性将webjob自动绑定到队列时

public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message){
       //do something with queue item
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在属性上设置可见性超时?在JobHostConfiguration()中似乎没有选项.队列.如果无法覆盖,那么它是标准的30秒吗?

azure azure-queues azure-storage-queues

5
推荐指数
2
解决办法
2507
查看次数

异步发布到Azure队列

我尝试异步地将Azure队列中的消息排入队列,如下所示:

private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
            var tasks = messages.Select(msg => _queue.AddMessageAsync(new CloudQueueMessage(msg),
                null, null, null, null));

            await Task.WhenAll(tasks);
        }
Run Code Online (Sandbox Code Playgroud)

如果我说得对,这说"开始将一个项目排在另一个项目之后而不等待它们发布,请为每个任务保留一个参考,然后等待所有发布".

此代码在大多数情况下工作正常,但对于大量项目(5000),它开始入队,然后抛出超时异常(在排队~3500项后).

我通过等待每一个完成然后继续下一个来解决它

private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
            foreach (var message in messages) {
                await _queue.AddMessageAsync(new CloudQueueMessage(message), null, null, null, null);
            }
        }
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会这样?

例外:

System.AggregateException包装许多此类异常: Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.<CreateCallbackVoid>b__3(IAsyncResult ar)请求信息RequestID:RequestDate:StatusMessage:<--- --->(内部异常#1)Microsoft.WindowsAzure.Storage.StorageException:客户端无法在指定的超时内完成操作.---> System.TimeoutException:客户端无法在指定的超时内完成操作.---内部异常堆栈跟踪结束--- Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync [T](IAsyncResult result)`.

c# async-await azure-queues

5
推荐指数
1
解决办法
1583
查看次数

Azure函数用于写入队列 - 我可以设置元数据吗?

我可以从这个页面看到,当它们被用作触发器时,你可以简单地访问队列消息元数据属性,但我想做相反的事情.我有一个Azure函数,它将消息写入队列,但它当前具有默认的到期时间,我想设置一个更短的过期时间,因此它们只在队列中存在很短的时间.

有没有办法从Azure函数将消息写入队列以设置过期时间?

谢谢

编辑1: 一个警告是我提前不知道队列的名称.这是传入消息的一部分,因此将queuename设置为输出绑定的参数,我根据@Mikhail的建议进行了更改.这是现有的功能:

#r "Microsoft.WindowsAzure.Storage"
#r "Newtonsoft.Json"

using System;
using Microsoft.WindowsAzure.Storage.Queue;
using Newtonsoft.Json;

public static void Run(MyType myEventHubMessage, CloudQueue outputQueue, TraceWriter log)
{
    var deviceId = myEventHubMessage.DeviceId;
    var data = JsonConvert.SerializeObject(myEventHubMessage);
    var msg = new CloudQueueMessage(data);
    log.Info($"C# Event Hub trigger function processed a message: {deviceId}");
    outputQueue.AddMessage(msg, TimeSpan.FromMinutes(3), null, null, null);

}

public class MyType
{
  public string DeviceId { get; set; }
  public double Field1{ get; set; }
  public double Field2 { get; set; }
  public …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-queues azure-functions

5
推荐指数
1
解决办法
3031
查看次数