2012-11-19 2 views
0

오스틴 샘플을 기반으로 샘플 응용 프로그램을 만들려고했습니다. 먼저 404 샘플을 가지고 App.Config에서 connectionString을 적용하여 해결했습니다 (저것은 잊었습니다). 이제 Azure 테이블 대신 Service Bus Queue에 메시지를 보내야하는 두 번째 싱크를 만들었습니다. SampleApplication 및 EventSourceSimulator를 시작할 때 처음 두 메시지는 올바르게 전달 된 것으로 보이지만 세 번째 메시지는 404 오류를 표시합니다. 다음은 오류 및 내 싱크대의 스크린 샷입니다. 좀 더 자세한 정보가 필요하면 알려주세요. 사전에 감사합니다, StreamInsight Austin 샘플 서비스 버스 404

Austin 404 Error

public class ServiceBusQueueSink<TEvent> 
{ 
    readonly QueueClient _queueClient; 
    readonly NamespaceManager _namespaceManager; 
    readonly string _connectionString; 
    readonly string _queueName = "DeviceErrorsQueue"; 
    readonly string _errorType; 
    readonly bool _storeCtis; 

    ServiceBusQueueSink(string errorType, bool storeCtis) 
    { 
     _errorType = errorType; 
     _storeCtis = storeCtis; 

     // Configure Queue Settings 
     QueueDescription qd = new QueueDescription(_queueName); 
     qd.MaxSizeInMegabytes = 2048; 
     qd.DefaultMessageTimeToLive = new TimeSpan(0, 1, 0); 

     // Create the queue if it does not exist already 
     _connectionstring = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 

     _namespaceManager = NamespaceManager.CreateFromConnectionString(_connectionString); 

     if (!_namespaceManager.QueueExists(_queueName)) 
     { 
      _namespaceManager.CreateQueue(_queueName); 
     } 

     _queueClient = QueueClient.CreateFromConnectionString(_connectionString, "DeviceErrorsQueue"); 

    } 

    /// <summary> 
    /// Write each received event into the service bus queue. 
    /// </summary> 
    /// <param name="e">Event to write.</param> 
    public void OnNext(PointEvent<TEvent> e) 
    { 
     bool send = false; 
     if (e.EventKind == EventKind.Cti) 
     { 
      if (_storeCtis) 
       send = true; 
      else 
       send = false; 
     } 
     else 
      send = true; 

     if (send) 
     { 
      BrokeredMessage message = new BrokeredMessage(e); 
      message.Properties["ErrorType"] = _errorType; 
      _queueClient.Send(message); 
     } 
    } 

    /// <summary> 
    /// Static method that returns a new Service Bus Queue sink observer. 
    /// </summary> 
    /// <param name="storageConnection">Service Bus Queue connection string.</param> 
    /// <param name="errorType">Type of error to be saved in properties of brokeredmessage.</param> 
    /// <param name="storeCtis">Flag specifying whether to also persist CTI events.</param> 
    /// <returns></returns> 
    public static IObserver<PointEvent<TEvent>> CreateObserver(string errorType, bool storeCtis) 
    { 
     var res = new ServiceBusQueueSink<TEvent>(errorType, storeCtis); 
     return Observer.Create<PointEvent<TEvent>>(e => res.OnNext(e)); 
    } 

업데이트 : 그래서 난 아무것도 얻을 수없는 가정 관리 포털에서 서비스 버스 대기열에서 아무것도 표시되지 않습니다.

답변

1

(yourservice)/devices에서 HttpSource가 있다고 가정합니다. 맞습니까? 문제는 쿼리에서 두 가지 메시지를 수신 한 후 출력 싱크가 의심되는 것입니다. 이 때문에 전체 쿼리가 종료되었으므로이 주소에 404가 표시됩니다. StreamInsight 저장소 계정의 로그 테이블을 보면 오류/예외 정보가 표시됩니다.

+0

나는 그 주소에서 실제로 HttpSource를 가지고있다. 나는 샘플과 동일하게 유지했으며, azureTableSink는 모든 것이 완벽하게 작동한다. 참으로 싱크대에 문제가 있지만 무엇을 찾을 수 없습니다. 내 스토리지를 볼 때 많은 테이블이 있지만 해당 계정에 대한 로그 쓰레드가 없습니다. WADWindowsEventLogsTable 및 siXWADLogsTable이 있지만 유용한 정보가 없습니다. – hhoud

+0

내 것이 어리석은 오류 였지만 당신의 대답은 저를 올바른 방향으로 생각하게 만들었습니다. StreamInsight Even Flow Debugger를 사용할 수 없지만 구성 파일을 올바르게 작성하지 않았지만 해결했습니다. 그리고 배포 할 때 Microsoft.ServiceBus.dll을 패키지에 추가하는 것을 잊어 버렸습니다. ... – hhoud

0

문제의 원인을 찾은 것으로 보입니다. 일반적으로, HTTP 엔드 포인트가 404 (아마도 몇 번의 요청이 성공한 후에)를 리턴한다면, 위의 첫 번째 응답에서 제안하는 것처럼 쿼리 파이프 라인의 어떤 것이 폭발했을 가능성이 높습니다. 이 경우 디버거를 연결하고 쿼리의 진단을 검사하여 예외가 발생합니다. Austin CTP 패키지 (시작 설명서의 일부)와 함께 제공되는 FAQ는 이에 대한 자세한 정보를 제공합니다.

관련 문제