CloudQueueClient.ResponseReceived Событие не работает?

Я пытаюсь создать управляемую событиями очередь Azure, в которой событие запускается каждый раз, когда сообщение помещается в очередь Azure. С помощью AzureXplorer я вижу, что сообщения правильно помещаются в очередь Azure, но событие CloudQueueClient.ResponseReceived никогда не срабатывает. Я использую Azure версии 1.4. Это код из моей рабочей роли:

public class WorkerRole : RoleEntryPoint
{
    public override void Run()
    {            
        while (true)
        {
            Thread.Sleep(10000);

        }
    }

    public override bool OnStart()
    {
        // Set the maximum number of concurrent connections 
        ServicePointManager.DefaultConnectionLimit = 12;

        var queuDataSource = new AzureQueueDataSource();
        queuDataSource.GetCloudQueueClient().ResponseReceived +=new EventHandler<ResponseReceivedEventArgs>(WorkerRole_ResponseReceived);


        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
        return base.OnStart();
    }

    void WorkerRole_ResponseReceived(object sender, ResponseReceivedEventArgs e)
    {
        var i = 1;  // Breakpoint here never happends
    }
}

person Community    schedule 27.03.2011    source источник


Ответы (1)


Очереди Windows Azure необходимо опрашивать на наличие новых сообщений. См. образцы SDK или код здесь, чтобы узнать, как запрашивать очереди для новых Сообщения.

Краткий список того, что нужно учитывать:

  1. Поскольку в Windows Azure опрос считается транзакцией, вы будете платить за это.
  2. Обычно лучше реализовать какой-то механизм повторных попыток, если сообщения не найдены (например, экспоненциальная отсрочка и т. д.).
  3. Обычно лучше получать сообщения пакетами (меньше циклов, меньше транзакций и т. д.).
  4. Помните, что сообщения могут быть доставлены более одного раза (запланируйте дублирование сообщений).
  5. Используйте свойство "dequeuecount" для обработки "ядовитых сообщений".

Обо всем этом есть много материалов. См. документацию/образцы по ссылке выше. Эта статья тоже довольно хороша: решений для обмена сообщениями на основе очереди в Windows-Azure.aspx" rel="nofollow">http://blogs.msdn.com/b/appfabriccat/archive/2010/12/20/best-practices- для максимизации масштабируемости и экономичности решений для обмена сообщениями на основе очередей в Windows Azure.aspx

person Eugenio Pace    schedule 27.03.2011
comment
Ну просто грустно. Угадайте, жадные люди из отдела маркетинга заставили вас сделать это?! ;) ... - person ; 28.03.2011
comment
Что ж, с положительной стороны, неплохо иметь стимулы для создания хорошо разработанных приложений, не так ли? И MS не сделает это и не сломает доход от очередей :-) - person Eugenio Pace; 17.01.2012