Search code examples
azureservicebusstreaminsightazureservicebus

StreamInsight Austin Sample Service Bus 404


I've been trying to create a sample application based on the Austin Sample. First I had a 404 with the sample, I fixed it by adapting the connectionString in the App.Config (I forgot that one, my bad). Now I've created a second sink which should send the messages to the Service Bus Queue instead of Azure Tables. When starting the SampleApplication and the EventSourceSimulator, the first two messages seem to pass correctly but the third one shows a 404 error. Following is a screenshot of the error and the class of my sink. If you need more information to help me, please tell me. Thanks in advance,

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));
    }

UPDATE: I don't see anything in the Service Bus Queue in the management portal so I suppose nothing gets there.


Solution

  • I suppose you have an HttpSource at (yourservice)/devices, right? The problem is that after receiving two messages something in your query breaks, I suspect the output sink. Because of that you receive 404 at this address, because the whole query was shut down. Please look at the log tables in your StreamInsight storage account, you should see the error/exception info there.