2016-03-03 4 views
0

Я пытаюсь собрать «общий» абонент, который я могу (повторно) использовать с Azure ServiceBus.(Azure) BrokeredMessage.GetBody <xxx>

Но я застреваю следующим образом; Мой код, однажды лишенный нестандартных деталей, выглядит следующим образом.

Subscribing.Client.OnMessage((recdMessage => 
{ 
    var msgBody = recdMessage.GetBody<myClass>(); 
}, options); 

Я хочу, чтобы мой msgBody быть такого типа, который был сериализации в тело сообщения. Действительно, если myClass должно было быть чем-то вроде TelephonyEventMessage, и полученное сообщение было такого типа, то мой msgBody был бы правильно созданным/регидратированным объектом этого типа. Но хотя я могу использовать recdMessage. ContentType, чтобы получить имя строки класса в этом сообщении .... Я просто не могу определить, что мне нужно положить в myClass выше. Теперь я в конце своих знаний, и никакие поисковые запросы не кажутся для меня ответом. Нужно ли добавлять конкретную версию для каждого типа, который может существовать в моих сообщениях?

ответ

1

Вы можете использовать это, чтобы получать сообщения от подписки, если вы ожидаете несколько различных типов объектов:

public void ReceiveMessageFromSubscription<T>(string topicPath, string subscriptionName, Action<T> action) 
{ 
    var client = SubscriptionClient.CreateFromConnectionString(ConnectionString, topicPath, subscriptionName); 

    client.OnMessage((message) => 
    { 
     try 
     { 
      _logger.Information("Processing message"); 
      action(message.GetBody<T>()); 
      message.Complete(); 
     } 
     catch(Exception ex) 
     { 
      _logger.Error(ex, "Error processing message"); 
      message.Abandon(); 
     } 
    }); 
} 

А затем передать в метод, который знает, как обращаться с объектом, как показано ниже. У вас может быть несколько таких методов, все вызывающие ReceiveMessageFromSubscription.

public void ProcessObject() 
{ 
    _serviceBusService.ReceiveMessageFromSubscription<MyObject>(mytopic, mysubscription, _myobjectService.ProcessObject); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^