小编kni*_*hor的帖子

Windows Azure:删除代理邮件时出错

我正在开发一个从Azure Service Bus队列中提取消息的Java应用程序.我正在使用Java Azure API(com.microsoft.windowsazure.services).我遇到的问题是,经过处理后删除代码消息有时会失败.

我的应用程序使用peek-lock接收模式,使用ServiceBusContract对象上的receiveQueueMessage()方法从队列中提取消息.一旦消息被成功处理,我通过调用deleteMessage()方法从队列中删除消息(我相信这个方法对应于.NET API中的Complete()方法).

但是,有时此方法调用失败.comMun.jersey.api.client.UniformInterfaceException异常由deleteMessage()记录到控制台,它不会抛出此异常(我将在下面生成输出).异常似乎告诉我无法找到该消息.发生这种情况时,消息将保留在队列中.实际上,下一次调用receiveQueueMessage()会再次检索此消息.然后删除失败一次或两次,然后成功.之后检索的消息成功删除.

以下是出现问题的代码:

ReceiveMessageOptions receiveOptions = ReceiveMessageOptions.DEFAULT; 
receiveOptions.setReceiveMode(ReceiveMode.PEEK_LOCK); 
BrokeredMessage message = serviceBus.receiveQueueMessage("my_queue",receiveOptions).getValue(); 
// Process the message 
System.out.println("Delete message with ID: "+message.getMessageId());
serviceBus.deleteMessage(message);
Run Code Online (Sandbox Code Playgroud)

以下是出现问题时输出的示例:

Delete message with ID: 100790000086491
2013/01/22 12:58:29 com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusExceptionProcessor processCatch
WARNING: com.sun.jersey.api.client.UniformInterfaceException: DELETE https://voyagernetzmessaging.servicebus.windows.net/sms_queue/messages/24/efa56a1c-95e8-4cd6-931a-972eac21563a returned a response status of 404 Not Found
com.sun.jersey.api.client.UniformInterfaceException: DELETE https://voyagernetzmessaging.servicebus.windows.net/sms_queue/messages/24/efa56a1c-95e8-4cd6-931a-972eac21563a returned a response status of 404 Not Found
    at com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:697)
    at com.sun.jersey.api.client.WebResource.delete(WebResource.java:261)
    at com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusRestProxy.deleteMessage(ServiceBusRestProxy.java:260)
    at com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusExceptionProcessor.deleteMessage(ServiceBusExceptionProcessor.java:176)
    at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.finalizeSms(SmsSender.java:114)
    at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.finalizeSms(SmsSender.java:119)
    at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.run(SmsSender.java:340)
com.microsoft.windowsazure.services.core.ServiceException: com.sun.jersey.api.client.UniformInterfaceException: DELETE …
Run Code Online (Sandbox Code Playgroud)

java azure azureservicebus azure-servicebus-queues

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

如何向所有工作者角色实例发送消息?

我使用AzureQueue在角色之间进行通信.我的消息如"GoToMaintenanceMode","StopSendingEmails","DoNotAcceptRequests"等.但我意识到,当我有多个实例时,由于队列消息,它将无法用于我的场景,一次只显示1个实例.

所以我的问题是旁边的选项是否有一个优雅的方式来处理像Role.AllInstances.Run()等问题?

我正在使用它的方法: 实例查看消息,将它自己的实例id添加到消息中并将其放回队列,如果消息包含它自己的实例id,则不会查看消息.

PS我不想实现TCP侦听器,如果有的话请求原生解决方案.

azure azure-storage-queues

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

使用一个或多个标准FIFO队列实现延迟队列

延迟队列是一个队列,其中每个消息都有一个与之关联的延迟时间,并且只有在其延迟到期时才能获取消息.队列的头部是那个过去延迟到期的消息.如果没有延迟到期,则没有头,而dequeue将返回null.

实际上,我正在使用Azure编写云应用程序,而在Azure中,只有FIFO队列可用,而不是优先级/延迟队列.所以我来到这里看是否有人可以给我一些指示,从我可以从正确的方向开始.我google了很多,但只发现了Java中的延迟队列实现,而没有标准的教程/研究论文,一般性地谈论延迟队列.

编辑:

我有什么代码?
实际上,我必须首先设计这些东西并将它呈现给我的经理,一旦我们完成设计,那么只有我才能开始编码.

关于场景的更多细节
它是基于主/从模型的分布式应用程序.主服务器生成消息并将它们放入Azure Service Bus队列,并且有多个从服务器(在多台计算机上运行)从队列中读取并进行处理.如果主机发生故障,则其中一个从机充当主机并开始生成消息.我不想在主服务器中存储任何状态信息,因为如果主服务器关闭,所有状态信息也将随之而来.

c# algorithm queue azure azure-storage-queues

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

Azure表存储并行查询

如果我没有指定分区密钥并因此执行所有分区的扫描,那么扫描是否会自动与并发扫描的每个分区并行进行?

谢谢.

azure azure-storage azure-table-storage

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