Сервисная шина Azure - перед отправкой настоящего сообщения необходимо добавить поддельное сообщение. Почему? - PullRequest
0 голосов
/ 24 апреля 2018

Я столкнулся со странной проблемой, и у меня закончились возможные причины.Сценарий:

  1. Извлечение входящего сообщения из очереди
  2. Обработка и добавление нового сообщения в другую очередь

, но дело в том, что если я закончудлительное задание для входящего сообщения, а затем попытаться добавить новое сообщение в другую очередь, я не получаю его.Если я просто добавлю сообщение в эту очередную очередь, то получу реальное сообщение после завершения длительной операции.Но почему ?Я не хочу помещать поддельные сообщения в очередь, но без этого мой сценарий не работает.Есть идеи?

public class WorkerRole : RoleEntryPoint
{
    // QueueClient is thread-safe. Recommended that you cache 
    // rather than recreating it on every request
    Microsoft.ServiceBus.Messaging.QueueClient Client;
    ManualResetEvent CompletedEvent = new ManualResetEvent(false);

    public override void Run()
    {
        MyResult result = null;

        var queueClient = new Microsoft.Azure.ServiceBus.QueueClient("QueueConnectionString", "QueueName");

        Client.OnMessage(async (receivedMessage) =>
            {
                try
                {
                    using (Stream stream = receivedMessage.GetBody<Stream>())
                    {
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            string json = reader.ReadToEnd();

                            OCRQueueItem_Incoming item = JsonConvert.DeserializeObject<IncomingClass>(json);
                            var someClass = new OCRManager();

                            var message = new Message(Encoding.UTF8.GetBytes("test 1"));

                            await queueClient.SendAsync(message);

                            result = new SomeManager().RunLongRunningTask(item); //it runs for 1-2min                         
                        }
                    }
                }
                catch (Exception ex) { }
                finally
                {
                    var json = JsonConvert.SerializeObject(result);

                    var message = new Message(Encoding.UTF8.GetBytes(json));

                    await queueClient.SendAsync(message);
                }
            });

        CompletedEvent.WaitOne();
    }

    public override bool OnStart()
    {
        ServicePointManager.DefaultConnectionLimit = 12;

        string connectionString = CloudConfigurationManager.GetSetting("Queue.ConnectionString");           

        Client = Microsoft.ServiceBus.Messaging.QueueClient.Create(connectionString);
        return base.OnStart();
    }

    public override void OnStop()
    {
        Client.Close();
        CompletedEvent.Set();
        base.OnStop();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...