使用azure表存储我读到了同一分区中的实体组事务.现在如果我将Azure Queue与表存储一起使用会发生什么.是否可以从队列中处理消息,插入到表存储中.如果出现问题,请回滚并再次将消息放入队列中?
或者我应该如何处理Azure的这种情况
我需要在两台服务器之间发送xml文件.这些文件最多可达1mb.
我正在考虑使用Azure存储队列作为这些文件的中间目标,但请注意,邮件大小有64kb的限制.我认为发送超过64kb的消息的要求并不少见.
有没有办法绕过极限?压缩也许?
我有一个在我的解决方案中的多个Role项目之间共享的类库.其中两个项目是Web角色和工作者角色.
它们各自具有相同的配置设置:
<Setting name="QueueConnectionString" value="UseDevelopmentStorage=true" />
他们每个人都在调用这个函数:
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));
 }
当它在Worker Role中执行时,它可以正常工作; 我已经确认了Queue消息的正确读写.当它在Web角色中执行时,对queue.CreateifNotExist()的调用崩溃并显示错误"响应在此上下文中不可用".我试图搜索可能导致这种情况的信息,但到目前为止,我的搜索工作一直没有结果.如果我可以提供任何其他信息,请告诉我.
在Windows Azure中,可以创建公共Blob容器.匿名客户端可以通过REST API访问此类容器.
是否也可以创建可公开访问的队列?
Create Container操作的文档说明了如何x-ms-blob-public-access为Blob容器指定公共访问级别(使用HTTP标头).但是,Create Queue操作的文档没有列出类似的选项,这让我相信这是不可能的 - 但我真的想要纠正:)
我正在使用Windows Azure消息队列.我想知道是否有一种方法可以在我得到它们时锁定队列中的消息?
出于测试目的,我们希望直接使用JavaScript访问Azure存储队列,而不是准备新的Web服务.
这可能吗?我们应该怎么做才能实现这一点,因为我找不到Azure存储的JavaScript API的官方文档.
我们使用以下设置:
我们使用带有队列触发器的 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函数,可以调用VM上托管的Web服务.由于这种依赖性,重要的是不要同时运行多达8个Azure功能实例(VM只有8个内核,每次调用Web服务都使用单个内核).如果生成的实例超过8个,则Web服务调用将开始备份,触发Azure功能的队列中的项将开始超时,并且将丢弃消息.但是,我还希望尽可能多地利用可用资源来最大化队列的处理,因此,当队列中有8个或更多项时,我希望始终有8个Azure函数实例运行.
为了完成所需的限制,我将Azure功能计划设置为在App Service计划而不是消耗计划上运行,并且我在host.json中为Azure功能服务设置了以下值:
{
    "queues": {
        "batchSize": 1,
        "newBatchThreshold": 7
    }
}
从理论上讲,这使得只要7个或更少的函数实例正在运行,那么另外1个消息将被出列,直到有8个消息被处理.我现在正在运行,它似乎正在运行,但我无法在host.json文档或WebJobs SDK文档中找到任何位置,以确定是否batchSize可以小于newBatchThreshold.我只知道建议是newBatchThreshold一半batchSize(这显然不是我在做什么).
我的问题是:这个配置好吗?或者有更好的方法来实现我的限制目标吗?
在开发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>
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>
我发现进入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;";
当我这样做时,会抛出异常
config.StorageConnectionString = ...
我正在运行Azure存储模拟器的v5.2 - 它正在运行.就像我说的那样,其他WebJob能够连接并运行没有任何问题,并且它们都具有相同的App.config文件. …
我需要从 Azure 上的多个应用服务读取消息并将其发布到 Rabbit MQ 实例。
任何人都可以建议我应该用来托管 Rabbit MQ 实例的 Azure 服务吗?