标签: azure-queues

Azure队列和表存储事务最佳实践

使用azure表存储我读到了同一分区中的实体组事务.现在如果我将Azure Queue与表存储一起使用会发生什么.是否可以从队列中处理消息,插入到表存储中.如果出现问题,请回滚并再次将消息放入队列中?

或者我应该如何处理Azure的这种情况

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

3
推荐指数
1
解决办法
1545
查看次数

如何使用Azure存储队列发送XML文件?

我需要在两台服务器之间发送xml文件.这些文件最多可达1mb.

我正在考虑使用Azure存储队列作为这些文件的中间目标,但请注意,邮件大小有64kb的限制.我认为发送超过64kb的消息的要求并不少见.

有没有办法绕过极限?压缩也许?

.net c# azure azure-queues azure-storage-queues

3
推荐指数
1
解决办法
518
查看次数

Windows Azure - Web角色无法访问本地开发队列存储

我有一个在我的解决方案中的多个Role项目之间共享的类库.其中两个项目是Web角色和工作者角色.

它们各自具有相同的配置设置:

<Setting name="QueueConnectionString" value="UseDevelopmentStorage=true" />
Run Code Online (Sandbox Code Playgroud)

他们每个人都在调用这个函数:

public static void AddMessage(string Message)
    {
        var account = CloudStorageAccount.DevelopmentStorageAccount;
        ServicePoint queueServicePoint = ServicePointManager.FindServicePoint(account.QueueEndpoint);
        queueServicePoint.UseNagleAlgorithm = false;
        var client = account.CreateCloudQueueClient();
        var queue = client.GetQueueReference(DefaultRoleInstanceQueueName);
        queue.CreateIfNotExist();
        queue.AddMessage(new CloudQueueMessage(Message));
 }
Run Code Online (Sandbox Code Playgroud)

当它在Worker Role中执行时,它可以正常工作; 我已经确认了Queue消息的正确读写.当它在Web角色中执行时,对queue.CreateifNotExist()的调用崩溃并显示错误"响应在此上下文中不可用".我试图搜索可能导致这种情况的信息,但到目前为止,我的搜索工作一直没有结果.如果我可以提供任何其他信息,请告诉我.

azure azure-storage azure-web-roles azure-queues

2
推荐指数
1
解决办法
771
查看次数

是否可以在Windows Azure中创建公共队列?

在Windows Azure中,可以创建公共Blob容器.匿名客户端可以通过REST API访问此类容器.

是否也可以创建可公开访问的队列?

Create Container操作文档说明了如何x-ms-blob-public-access为Blob容器指定公共访问级别(使用HTTP标头).但是,Create Queue操作文档没有列出类似的选项,这让我相信这是不可能的 - 但我真的想要纠正:)

azure azure-storage azure-queues

2
推荐指数
1
解决办法
466
查看次数

使用Windows Azure队列锁定队列中的消息

我正在使用Windows Azure消息队列.我想知道是否有一种方法可以在我得到它们时锁定队列中的消息?

message-queue azure azure-storage azure-queues

2
推荐指数
1
解决办法
2013
查看次数

如何通过JavaScript访问Azure存储队列

出于测试目的,我们希望直接使用JavaScript访问Azure存储队列,而不是准备新的Web服务.

这可能吗?我们应该怎么做才能实现这一点,因为我找不到Azure存储的JavaScript API的官方文档.

azure azure-storage azure-queues

2
推荐指数
1
解决办法
1162
查看次数

使用队列触发器取消 Azure Functions,而不使用有害队列

我们使用以下设置:

我们使用带有队列触发器的 Azure 函数来处理 JSON 消息队列。

这些消息均通过 HTTP POST 转发到 API 端点,以进行进一步处理。

API可以返回3种可能的HTTP状态码;200(正常)、400(错误请求)、500(内部服务器错误)。

如果 API 返回 200,则消息已正确处理,一切正常。队列触发功能似乎会自动删除队列消息,这对我们来说没问题。

如果 API 返回 400,则 API 具有获取消息并将其添加到表中的逻辑,该表的状态表明消息格式错误或无法处理。因此,我们同意消息自动从队列中删除,并且 Azure Function 可以正常结束。

如果 API 返回 500,我们确保函数重试将消息发布到 API,直到状态代码为 200 或 400(因为 API 可能存在问题,我们不希望丢失消息)。我们正在使用Polly来实现这一目标。我们对其进行了设置,因此它本质上会以指数退避方式永远重试。

然而我们最近遇到了这个问题:

在某些情况下,API 会针对某些消息返回 500。此错误完全是暂时的,并且会不可预测地出现和消失。使用 Polly 永远重试会很好,除非并非所有消息都会导致此错误,并且本质上“坏”消息会阻止“好”消息的处理。

举例来说,我的队列中有 50 条消息。队列前面的前 32 条消息是“坏”消息,有时会从 API 返回 500。这些消息由 Azure Function 获取并同时处理。其他 18 条消息是“好”消息,将返回 200。在成功处理“坏”消息之前,不会处理这些“好”消息。本质上,坏的会导致好的交通堵塞。

我的解决方案是,如果当前消息已重试一定次数,则尝试取消 Azure 函数的执行。我想也许该消息会在一段时间后变得可见,但在那段时间里,它给了好的消息时间来处理。但是,我不知道如何取消该函数的执行,而不导致队列消息被完全删除或推送到有害队列。

我可以使用队列触发功能来实现这一点吗?我可以使用计时器触发器来代替吗?

非常感谢!

azure azure-queues azure-functions

2
推荐指数
1
解决办法
2930
查看次数

Azure函数host.json队列batchSize小于newBatchThreshold

我有一个Azure函数,可以调用VM上托管的Web服务.由于这种依赖性,重要的是不要同时运行多达8个Azure功能实例(VM只有8个内核,每次调用Web服务都使用单个内核).如果生成的实例超过8个,则Web服务调用将开始备份,触发Azure功能的队列中的项将开始超时,并且将丢弃消息.但是,我还希望尽可能多地利用可用资源来最大化队列的处理,因此,当队列中有8个或更多项时,我希望始终有8个Azure函数实例运行.

为了完成所需的限制,我将Azure功能计划设置为在App Service计划而不是消耗计划上运行,并且我在host.json中为Azure功能服务设置了以下值:

{
    "queues": {
        "batchSize": 1,
        "newBatchThreshold": 7
    }
}
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这使得只要7个或更少的函数实例正在运行,那么另外1个消息将被出列,直到有8个消息被处理.我现在正在运行,它似乎正在运行,但我无法在host.json文档或WebJobs SDK文档中找到任何位置,以确定是否batchSize可以小于newBatchThreshold.我只知道建议是newBatchThreshold一半batchSize(这显然不是我在做什么).

我的问题是:这个配置好吗?或者有更好的方法来实现我的限制目标吗?

azure azure-queues azure-webjobssdk azure-functions

2
推荐指数
1
解决办法
1310
查看次数

无法启动WebJob - "不支持Azure存储模拟器"

在开发Azure WebJob的过程中,我遇到了异常

无法验证Microsoft Azure WebJobs SDK存储帐户.不支持Microsoft Azure存储模拟器,请使用Microsoft Azure中托管的Microsoft Azure存储帐户.

这似乎相当普遍,解决方案通常是将连接字符串更新为特定值.但是,在我的情况下,我已经有了这个特定的连接字符串.

此外,我在同一个解决方案中有两个WebJobs:我在两种情况下都使用完全相同的连接字符串,而另一个WebJob连接没有任何问题.

App.config我有

<connectionStrings>
    <add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName= ... ;AccountKey= ... " />
    <add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

appSettings下显示相同的连接字符串:

<appSettings>
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;" />
    <!--<add key="StorageConnectionString" value="UseDevelopmentStorage=true" />-->
</appSettings>
Run Code Online (Sandbox Code Playgroud)

我发现进入UseDevelopmentStorage=true没有任何区别.

我也试过在以下方面手动声明这些static void Main:

var config = new JobHostConfiguration {
                                          JobActivator = new WebJobActivator(kernel)
                                      };
config.DashboardConnectionString = "DefaultEndpointsProtocol=https;AccountName= ... ;AccountKey= ... ";
config.StorageConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;";
Run Code Online (Sandbox Code Playgroud)

当我这样做时,会抛出异常

config.StorageConnectionString = ...
Run Code Online (Sandbox Code Playgroud)

我正在运行Azure存储模拟器的v5.2 - 它正在运行.就像我说的那样,其他WebJob能够连接并运行没有任何问题,并且它们都具有相同的App.config文件. …

c# azure azure-storage azure-queues

2
推荐指数
1
解决办法
1434
查看次数

Azure 中的 Rabbit MQ 支持

我需要从 Azure 上的多个应用服务读取消息并将其发布到 Rabbit MQ 实例。

任何人都可以建议我应该用来托管 Rabbit MQ 实例的 Azure 服务吗?

messaging azure rabbitmq azure-queues

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