Skip to content

Instantly share code, notes, and snippets.

@zshift
Last active August 29, 2015 14:15
Show Gist options
  • Select an option

  • Save zshift/f86ead05796f515839e1 to your computer and use it in GitHub Desktop.

Select an option

Save zshift/f86ead05796f515839e1 to your computer and use it in GitHub Desktop.

Revisions

  1. zshift renamed this gist Feb 20, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. zshift created this gist Feb 20, 2015.
    84 changes: 84 additions & 0 deletions Log
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    DEBUG: Trying to connect
    DEBUG: OnConnected event fired
    INFO: Connected to RabbitMQ. Broker: 'localhost', Port: 5672, VHost: '/'
    INFO: Disconnected from RabbitMQ Broker
    DEBUG: Trying to connect
    DEBUG: Persistent channel operation failed. Waiting for reconnection.
    ERROR: Failed to connect to Broker: 'localhost', Port: 5672 VHost: '/'. ExceptionMessage: 'None of the specified endpoints were reachable'
    ERROR: Failed to connect to any Broker. Retrying in 5000 ms

    ERROR: Channel action timed out. Throwing exception to client.
    An error occurred while responding: System.AggregateException: One or more errors occurred. ---> System.TimeoutException: The operation requested on P
    ersistentChannel timed out.
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelAction(Action`1 channelAction)
    at EasyNetQ.Producer.ClientCommandDispatcherSingleton.<>c__DisplayClass5`1.<Invoke>b__2()
    --- End of inner exception stack trace ---
    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
    at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
    at System.Threading.Tasks.Task`1.get_Result()
    at EasyNetQ.RabbitAdvancedBus.ExchangeDeclare(String name, String type, Boolean passive, Boolean durable, Boolean autoDelete, Boolean internal, Str
    ing alternateExchange)
    at EasyNetQ.Producer.Rpc.Respond[TRequest,TResponse](Func`2 responder, Action`1 configure)
    at EasyNetQ.RabbitBus.RespondAsync[TRequest,TResponse](Func`2 responder, Action`1 configure)
    at EasyNetQ.RabbitBus.RespondAsync[TRequest,TResponse](Func`2 responder)
    at EasyNetQ.RabbitBus.Respond[TRequest,TResponse](Func`2 responder)
    at EasyNetQBug.RabbitClient.RegisterResponder() in c:\Users\peterf\Documents\Visual Studio 2013\Projects\EasyNetQBug\EasyNetQBug\Program.cs:line 70

    ---> (Inner Exception #0) System.TimeoutException: The operation requested on PersistentChannel timed out.
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelAction(Action`1 channelAction)
    at EasyNetQ.Producer.ClientCommandDispatcherSingleton.<>c__DisplayClass5`1.<Invoke>b__2()<---

    DEBUG: Trying to connect
    DEBUG: OnConnected event fired
    INFO: Disconnected from RabbitMQ Broker
    DEBUG: Trying to connect
    DEBUG: Persistent channel operation failed. Waiting for reconnection.
    ERROR: Failed to connect to Broker: 'localhost', Port: 5672 VHost: '/'. ExceptionMessage: 'None of the specified endpoints were reachable'
    ERROR: Failed to connect to any Broker. Retrying in 5000 ms

    ERROR: Channel action timed out. Throwing exception to client.
    An error occurred while responding: System.AggregateException: One or more errors occurred. ---> System.TimeoutException: The operation requested on P
    ersistentChannel timed out.
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelAction(Action`1 channelAction)
    at EasyNetQ.Producer.ClientCommandDispatcherSingleton.<>c__DisplayClass5`1.<Invoke>b__2()
    --- End of inner exception stack trace ---
    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
    at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
    at System.Threading.Tasks.Task`1.get_Result()
    at EasyNetQ.RabbitAdvancedBus.ExchangeDeclare(String name, String type, Boolean passive, Boolean durable, Boolean autoDelete, Boolean internal, Str
    ing alternateExchange)
    at EasyNetQ.Producer.Rpc.Respond[TRequest,TResponse](Func`2 responder, Action`1 configure)
    at EasyNetQ.RabbitBus.RespondAsync[TRequest,TResponse](Func`2 responder, Action`1 configure)
    at EasyNetQ.RabbitBus.RespondAsync[TRequest,TResponse](Func`2 responder)
    at EasyNetQ.RabbitBus.Respond[TRequest,TResponse](Func`2 responder)
    at EasyNetQBug.RabbitClient.RegisterResponder() in c:\Users\peterf\Documents\Visual Studio 2013\Projects\EasyNetQBug\EasyNetQBug\Program.cs:line 70

    ---> (Inner Exception #0) System.TimeoutException: The operation requested on PersistentChannel timed out.
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelActionInternal(Action`1 channelAction, DateTime startTime)
    at EasyNetQ.Producer.PersistentChannel.InvokeChannelAction(Action`1 channelAction)
    at EasyNetQ.Producer.ClientCommandDispatcherSingleton.<>c__DisplayClass5`1.<Invoke>b__2()<---

    DEBUG: Trying to connect
    Fatal Exception:
    EasyNetQ.EasyNetQException: Not connected
    at EasyNetQ.PersistentConnection.CreateModel()
    at EasyNetQ.Producer.PersistentChannel.OpenChannel()
    at EasyNetQ.Producer.PersistentChannel.ConnectionOnConnected(ConnectionCreatedEvent event)
    at EasyNetQ.EventBus.Publish[TEvent](TEvent event)
    at EasyNetQ.PersistentConnection.OnConnected()
    at EasyNetQ.PersistentConnection.TryToConnect(Object timer)
    at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx
    )
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.TimerQueueTimer.CallCallback()
    at System.Threading.TimerQueueTimer.Fire()
    at System.Threading.TimerQueue.FireNextTimers()
    at System.Threading.TimerQueue.AppDomainTimerCallback()
    91 changes: 91 additions & 0 deletions RabbitMQ Application Shutdown bug
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,91 @@
    using System;
    using System.Threading;
    using EasyNetQ;
    using EasyNetQ.ConnectionString;
    using EasyNetQ.Loggers;

    namespace EasyNetQBug
    {
    public class Program
    {
    public static void Main(String[] args)
    {
    AppDomain.CurrentDomain.UnhandledException += (sender, a) =>
    {
    Console.WriteLine("Fatal Exception:\n" + a.ExceptionObject);
    };

    var client = new RabbitClient();
    client.Start();

    // simulate long-running process
    while (true)
    {
    Thread.Sleep(5000);
    }
    }
    }

    public class RabbitClient
    {
    private IBus bus;
    private IDisposable responder;

    public void Start()
    {
    var config = ConnectionConfiguration();

    bus = RabbitHutch.CreateBus(config, RegisterConsoleLogger);
    if (bus.IsConnected)
    {
    RegisterResponder();
    }

    bus.Connected += RegisterResponder;
    bus.Disconnected += DeregisterResponder;
    }

    private void RegisterConsoleLogger(IServiceRegister serviceRegister)
    {
    serviceRegister.Register<IEasyNetQLogger>(serviceProvider => new ConsoleLogger());
    }

    private static ConnectionConfiguration ConnectionConfiguration()
    {
    var config = new ConnectionStringParser().Parse("host=localhost");
    config.VirtualHost = "/";
    config.PublisherConfirms = true;
    config.PersistentMessages = true;
    config.Timeout = 5;
    return config;
    }

    private void RegisterResponder()
    {
    try
    {
    // If rabbit loses connection here, and this occurs twice,
    // EasyNetQ throws an exception from within a thread,
    // and the application cannot recover.
    responder = bus.Respond<string, string>(Respond);
    }
    catch (Exception e)
    {
    Console.WriteLine("An error occurred while responding: " + e);
    }
    }

    private void DeregisterResponder()
    {
    if (responder == null) return;

    responder.Dispose();
    responder = null;
    }

    private static string Respond(string arg)
    {
    return arg + ".";
    }
    }
    }