Question

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.

Was it helpful?

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.

OTHER TIPS

It seems like you found the reason for your issue. In general, if the HTTP endpoint returns 404 (possibly after a few successful requests), it is likely that something in your query pipeline blew up, as the first reply above suggests. In that case you can get to the thrown exception by connecting the debugger and inspect the query's diagnostics. The FAQ that comes with the Austin CTP package (part of the getting started doc) provides more information about that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top