Esempio n. 1
0
        public void Reconnect()
        {
            RabbitToken.Dispose();
            var newToken = BuildStrategy.ResubscribeConsumer(MessageBus, Queue);

            RabbitToken = newToken;
        }
Esempio n. 2
0
 public RabbitConsumer(IMessageBus messageBus, IConsumerBuildStrategy buildStrategy, RabbitConsumerOptions queue, ISubscriptionResult rabbitToken)
 {
     MessageBus    = messageBus;
     BuildStrategy = buildStrategy;
     Queue         = queue;
     RabbitToken   = rabbitToken;
 }
Esempio n. 3
0
 /// <summary>
 /// 订阅消息。自定义主题
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="work">消息处理方式</param>
 /// <param name="subscriptionId">订阅者ID</param>
 /// <param name="fail">失败处理方式</param>
 /// <param name="topics">主题</param>
 public void Subscribe <T>(Action <T> work, Action fail = null, string subscriptionId = "topic_subid", params string[] topics) where T : class, IBaseMqMessage
 {
     this.Logger(this.GetType(), "订阅消息。自定义主题-Subscribe", () =>
     {
         if (topics != null && topics.Length > 0)
         {
             ISubscriptionResult result = bus.Subscribe <T>(subscriptionId, work, c =>
             {
                 foreach (string topic in topics)
                 {
                     c.WithTopic(topic);
                 }
             });
         }
         else
         {
             ISubscriptionResult result = bus.Subscribe <T>(subscriptionId, work);
         }
     }, e =>
     {
         if (fail != null)
         {
             fail.Invoke();
         }
     });
 }
Esempio n. 4
0
        //异步接收消息
        private static void AsyncSubscripe(IBus bus)
        {
            ISubscriptionResult result = bus.SubscribeAsync <RequestLog>("", model => Task.Factory.StartNew(() =>
            {
                //EasyNetQ.JsonSerializer s = new EasyNetQ.JsonSerializer(new TypeNameSerializer());

                ////var model = s.BytesToMessage<RequestLog>(msg);
                //Console.ForegroundColor = ConsoleColor.Red;
                //Console.WriteLine("Input: {0}", model.RequestLog.Input);
                //Console.WriteLine("Output: {0}", model.RequestLog.Output);
                //Console.WriteLine("RequestDate: {0}", model.RequestLog.RequestDate.ToString());
                //Console.ResetColor();

                //throw new Exception("AsyncSubscripe Exception");
            }).ContinueWith(task =>
            {
                if (task.IsCompleted && !task.IsFaulted)  //处理正常
                {
                }
                else   //异常
                {
                    // Dont catch this, it is caught further up the heirarchy and results in being sent to the default error queue
                    // on the broker
                    //不用捕获此异常,异常信息会自动写入Queue EasyNetQ_Default_Error_Queue队列
                    //该队列包含了接收的消息和异常信息
                    throw new EasyNetQException("Message processing exception - look in the default error queue (broker)");
                }
            }));
        }
Esempio n. 5
0
        //异步接收消息
        private static void AsyncSubscripe(IBus bus)
        {
            //bus.SubscribeAsync<TextMessage>("subscribe_async_test", message =>
            //       new WebClient().DownloadStringTaskAsync(new Uri("http://www.cnblogs.com"))
            //                      .ContinueWith(task =>
            //                            Console.WriteLine("Received: '{0}', Downloaded: '{1}'",
            //                                message.Text,
            //                                task.Result)));

            ISubscriptionResult result = bus.SubscribeAsync <Message>("subscribe_async_test", message => Task.Factory.StartNew(() =>
            {
                // Perform some actions here
                // If there is a exception it will result in a task complete but task faulted which
                // is dealt with below in the continuation
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Got message: {0}", message.Text);
                Console.ResetColor();

                //throw new Exception("AsyncSubscripe Exception");
            }).ContinueWith(task =>
            {
                if (task.IsCompleted && !task.IsFaulted)  //处理正常
                {
                }
                else   //异常
                {
                    // Dont catch this, it is caught further up the heirarchy and results in being sent to the default error queue
                    // on the broker
                    //不用捕获此异常,异常信息会自动写入Queue EasyNetQ_Default_Error_Queue队列
                    //该队列包含了接收的消息和异常信息
                    throw new EasyNetQException("Message processing exception - look in the default error queue (broker)");
                }
            }));
        }
Esempio n. 6
0
        private const int MaxRetryDelay        = 60 * 1000; // ONE MINUTE

        private static Tuple <IQueue, IExchange> CreateExceptionQueues(IBus bus, ISubscriptionResult subscription)
        {
            var eq = bus.Advanced.QueueDeclare($"{subscription.Queue.Name}{Exceptions}");
            var ee = bus.Advanced.ExchangeDeclare($"{subscription.Queue.Name}{Exceptions}", ExchangeType);

            bus.Advanced.Bind(ee, eq, "");
            return(Tuple.Create(eq, ee));
        }
 public void Dispose()
 {
     if (_consumer != null)
     {
         _consumer.Dispose();
         _consumer = null;
     }
 }
Esempio n. 8
0
 public SubscriptionToken(RabbitModule module, ISubscriptionResult token, Guid id, string queueName, string topic)
 {
     _token     = token;
     _id        = id;
     _queueName = queueName;
     _topic     = topic;
     _module    = module;
 }
Esempio n. 9
0
        static void Main(string[] args)
        {
            Console.Title = "Worker Selenium";

            Bus = RabbitHutch.CreateBus(GetBusConfiguration(FindRabbit()));

            Logger = new LoggerConfiguration()
                     .WriteTo.ColoredConsole()
                     .WriteTo.RollingFile("log.txt", retainedFileCountLimit: 7)
                     .CreateLogger();

            var dir = AppDomain.CurrentDomain.BaseDirectory;

            dir = Path.GetFullPath(Path.Combine(dir, @"..\..\..\"));

            var chromePortable = Path.Combine(dir, @"GoogleChromePortable\GoogleChromePortable.exe");

            IWebDriver driver = new ChromeDriver(new ChromeOptions
            {
                BinaryLocation = chromePortable
            });

            IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;

            SubscriptionResult = Bus.SubscribeAsync("subscriptionId", GetLogic(node => Logger.Information("{@Node}", node),
                                                                               url => { driver.Navigate().GoToUrl(url);
                                                                                        driver.WaitForPageLoad();
                                                                                        return(Task.FromResult(true)); },
                                                                               script =>
            {
                string result = (string)jse.ExecuteScript(script.Replace("(function() {", "").Replace("})();", ""));
                return(Task.FromResult(result));
            },
                                                                               async node => await Bus.PublishAsync(node),
                                                                               async node => await Bus.PublishAsync(new Result {
                Node = node
            }),
                                                                               async node =>
            {
                Logger.Error("{@Node}", node);
                await Bus.PublishAsync(new ErrorResult {
                    Node = node
                });
            },
                                                                               node => { }));

            Console.ReadLine();

            SubscriptionResult.Dispose();

            driver.QuitAll();

            Environment.Exit(0);
        }
Esempio n. 10
0
 /// <summary>
 /// 订阅消息
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="work">消息处理方式</param>
 /// <param name="subscriptionId">订阅者ID</param>
 /// <param name="fail">失败处理方式</param>
 public void Subscribe <T>(Action <T> work, Action fail = null, string subscriptionId = "topic_subid") where T : class, IBaseMqMessage
 {
     this.Logger(this.GetType(), "订阅消息-Subscribe", () =>
     {
         ISubscriptionResult result = bus.Subscribe <T>(subscriptionId, work);
     }, e =>
     {
         if (fail != null)
         {
             fail.Invoke();
         }
     });
 }
Esempio n. 11
0
        public When_subscribe_is_called()
        {
            var conventions = new Conventions(new DefaultTypeNameSerializer())
            {
                ConsumerTagConvention = () => consumerTag
            };

            mockBuilder = new MockBuilder(x => x
                                          .Register <IConventions>(conventions)
                                          );

            subscriptionResult = mockBuilder.Bus.Subscribe <MyMessage>(subscriptionId, message => { });
        }
Esempio n. 12
0
        public void SetUp()
        {
            var conventions = new Conventions(new TypeNameSerializer())
            {
                ConsumerTagConvention = () => consumerTag
            };

            mockBuilder = new MockBuilder(x => x
                                          .Register <IConventions>(_ => conventions)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            subscriptionResult = mockBuilder.Bus.Subscribe <MyMessage>(subscriptionId, message => { });
        }
Esempio n. 13
0
        public void SetUp()
        {
            var conventions = new Conventions(new TypeNameSerializer())
                {
                    ConsumerTagConvention = () => consumerTag
                };

            mockBuilder = new MockBuilder(x => x
                .Register<IConventions>(_ => conventions)
                //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                );

            subscriptionResult = mockBuilder.Bus.Subscribe<MyMessage>(subscriptionId, message => { });
        }
Esempio n. 14
0
        private async void MainForm_Loaded(object sender, EventArgs e)
        {
            await Browser.WaitForInitializationAsync();

            SubscriptionResult = Bus.SubscribeAsync("subscriptionId", GetLogic(node => Logger.Information("{@Node}", node),
                                                                               url => Task.FromResult(Browser.LoadPage(url)),
                                                                               script => Task.FromResult(Browser.EvaluateScriptWithReturn(script)),
                                                                               async node => await Bus.PublishAsync(node),
                                                                               async node => await Bus.PublishAsync(new Result {
                Node = node
            }),
                                                                               async node =>
            {
                Logger.Error("{@Node}", node);
                await Bus.PublishAsync(new ErrorResult {
                    Node = node
                });
            },
                                                                               node => {}));
        }
Esempio n. 15
0
        public static void Main(string[] args)
        {
            Console.Title = "Worker CefSharp OffScreen";

            Bus = RabbitHutch.CreateBus(GetBusConfiguration(FindRabbit()));

            Logger = new LoggerConfiguration()
                     .WriteTo.ColoredConsole()
                     .WriteTo.RollingFile("log.txt", retainedFileCountLimit: 7)
                     .CreateLogger();

            InitializeChromium();

            SubscriptionResult = Bus.SubscribeAsync("subscriptionId", GetLogic(node => Logger.Information("{@Node}", node),
                                                                               url => Task.FromResult(Browser.LoadPage(url)),
                                                                               script => Task.FromResult(Browser.EvaluateScriptWithReturn(script)),
                                                                               async node => await Bus.PublishAsync(node),
                                                                               async node => await Bus.PublishAsync(new Result {
                Node = node
            }),
                                                                               async node =>
            {
                Logger.Error("{@Node}", node);
                await Bus.PublishAsync(new ErrorResult {
                    Node = node
                });
            },
                                                                               node => {}));

            Console.ReadLine();

            SubscriptionResult.Dispose();

            // Clean up Chromium objects.  You need to call this in your application otherwise
            // you will get a crash when closing.
            Cef.Shutdown();

            Environment.Exit(0);
        }
Esempio n. 16
0
        private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            await Browser.WaitForInitializationAsync();

            SubscriptionResult = Bus.SubscribeAsync("subscriptionId", GetLogic(node => Logger.Information("{@Node}", node),
                                                                               url => Task.FromResult(Browser.LoadPage(url)),
                                                                               script =>
            {
                string result             = null;
                AutoResetEvent waitHandle = new AutoResetEvent(false);

                Task.Run(async() =>
                {
                    await Dispatcher.Invoke(async() =>
                    {
                        result = await Browser.EvaluateScriptWithReturnAsync(script);
                        waitHandle.Set();
                    });
                });

                waitHandle.WaitOne();

                return(Task.FromResult(result));
            },
                                                                               async node => await Bus.PublishAsync(node),
                                                                               async node => await Bus.PublishAsync(new Result {
                Node = node
            }),
                                                                               async node =>
            {
                Logger.Error("{@Node}", node);
                await Bus.PublishAsync(new ErrorResult {
                    Node = node
                });
            },
                                                                               node => {}));
        }
        private void InitializeBus()
        {
            var bus = RabbitHutch.CreateBus("host=192.168.1.105;username=test;password=test");

            subscription = bus.Subscribe <PublishedMessage>(listenerName, m => handler(), q => q.WithTopic(topic));
        }
Esempio n. 18
0
        static void Main(string[] args)
        {
            Console.Title = "Worker Remote Debugging";

            var dir = AppDomain.CurrentDomain.BaseDirectory;

            dir = Path.GetFullPath(Path.Combine(dir, @"..\..\..\"));

            Process.Start(Path.Combine(dir, @"GoogleChromePortable\GoogleChromePortable.exe"), "--remote-debugging-port=9222 about:blank");

            while (!UrlExists("http://*****:*****@Node}", node),
                                                                               url =>
            {
                using (MyClientWebSocket ws = new MyClientWebSocket(firstUrl))
                {
                    ws.Open(url, CancellationToken.None);
                    ws.WaitForDocumentReady();

                    return(Task.FromResult(true));
                }
            },
                                                                               script =>
            {
                using (MyClientWebSocket ws = new MyClientWebSocket(firstUrl))
                {
                    string value = ws.EvaluateWithReturn(script, CancellationToken.None);
                    ws.WaitForDocumentReady();

                    return(Task.FromResult(value));
                }
            },
                                                                               async node => await Bus.PublishAsync(node),
                                                                               async node => await Bus.PublishAsync(new Result {
                Node = node
            }),
                                                                               async node =>
            {
                Logger.Error("{@Node}", node);
                await Bus.PublishAsync(new ErrorResult {
                    Node = node
                });
            },
                                                                               node => { }));

            //Test(firstUrl);

            Console.ReadLine();

            SubscriptionResult.Dispose();

            var chromePoratable = Process.GetProcessesByName("GoogleChromePortable");

            chromePoratable.ToList().ForEach(x => IgnoreExceptions(() => x.Kill()));

            Environment.Exit(0);
        }
        private void InitializeBus()
        {
            var bus = RabbitHutch.CreateBus("host=localhost");

            subscription = bus.Subscribe <PublishedMessage>(listenerName, m => handler(), q => q.WithTopic(topic));
        }
Esempio n. 20
0
 private void InitialiseBus()
 {
     var bus = RabbitHutch.CreateBus("host=localhost");
     subscription = bus.Subscribe<PublishedMessage>(listenerName, m => handler(), q => q.WithTopic(topic));
 }
 private void InitializeMessaging()
 {
     _consumer = _bus.SubscribeAsync <ProcessMediaItemRequestEvent>("Media", OnRequestAsync);
 }
Esempio n. 22
0
        public void ProcessQueueProductEmail(string subscriberId)
        {
            _currentSubscription = _bus.SubscribeAsync <ProductMailQueueDto>(subscriberId, pmq =>
            {
                return(Task.Factory.StartNew(() =>
                {
                    var _productMailQueueRepositoryLocal =
                        ServiceLocator.Current.GetInstance <IMercuritusFullDomainRepository <ProductMailQueue> >();

                    var _userRepositoryLocal =
                        ServiceLocator.Current.GetInstance <IMercuritusFullDomainRepository <User> >();

                    var _unitWorkLocal =
                        ServiceLocator.Current.GetInstance <IMercuritusFullDomainUnitOfWork>();

                    Check.Require(pmq.ProductMailQueueID > 0, "productMailQueueId must be positive");

                    var productMailQueueToProcess = _productMailQueueRepositoryLocal.DbSet.Where(
                        x => x.ProductMailQueueID == pmq.ProductMailQueueID && x.Activate == true).FirstOrDefault();

                    Check.Require(productMailQueueToProcess != null, "productMailQueueId must be valid");
                    Check.Require(productMailQueueToProcess.QueueStatusID == (int)QueueStatusEnum.CREATED, "productMailQueue must be in CREATED mode");

                    try
                    {
                        var now = DateTime.Now;
                        productMailQueueToProcess.Message = "Processing...";
                        productMailQueueToProcess.ModifiedOn = now;
                        productMailQueueToProcess.QueueStatusID = (int)QueueStatusEnum.PROCESSING;
                        _productMailQueueRepositoryLocal.Update(productMailQueueToProcess);
                        _unitWorkLocal.Commit();

                        var p = productMailQueueToProcess.Product;
                        Check.Require(p.UserID.HasValue, "product must be assigned to a user, for email adress");
                        var u = _userRepositoryLocal.GetById(p.UserID.Value);
                        var template = productMailQueueToProcess.MailerTemplate;

                        var m = new FluentEmail.Email("*****@*****.**", "Mendeo - No Reply")
                                .To(u.EMail)
                                .Subject(template.Subject)
                                .UsingTemplate(template.Body, p, template.IsHtml);

                        m.Send();

                        var nowSent = DateTime.Now;
                        productMailQueueToProcess.Message = "Sent...";
                        productMailQueueToProcess.ModifiedOn = nowSent;
                        productMailQueueToProcess.QueueStatusID = (int)QueueStatusEnum.SUCCESS;
                        _productMailQueueRepositoryLocal.Update(productMailQueueToProcess);
                    }
                    catch (Exception e)
                    {
                        var nowError = DateTime.Now;
                        productMailQueueToProcess.Message = e.Message;
                        productMailQueueToProcess.ModifiedOn = nowError;
                        productMailQueueToProcess.QueueStatusID = (int)QueueStatusEnum.ERROR;
                        _productMailQueueRepositoryLocal.Update(productMailQueueToProcess);
                    }
                    finally
                    {
                        _unitWorkLocal.Commit();
                    }
                }));
            });
        }
Esempio n. 23
0
 public void Start(Func <EmailMessage, Task> callback)
 {
     subscriptionResult = bus.SubscribeAsync <EmailMessage>(options.SubscriptionId, callback);
 }
Esempio n. 24
0
 // CreateImageRequestEvent
 private void InitializeMessaging()
 {
     _consumer = _bus.SubscribeAsync <PurgeOldMediaRequestEvent>("Media", OnRequest);
 }
Esempio n. 25
0
        private static Tuple <IExchange, IExchange, IQueue> CreateRetryQueues(IBus bus, ISubscriptionResult subscription, int retryDelay)
        {
            var re = bus.Advanced.ExchangeDeclare($"{subscription.Queue.Name}{Retry}", ExchangeType);
            var he = bus.Advanced.ExchangeDeclare($"{subscription.Queue.Name}{Holding}_{retryDelay}ms", ExchangeType);
            var fe = bus.Advanced.ExchangeDeclare($"{subscription.Queue.Name}{Failed}", ExchangeType);

            var hq = bus.Advanced.QueueDeclare($"{subscription.Queue.Name}{Holding}_{retryDelay}ms", cfg =>
            {
                cfg.WithMessageTtl(TimeSpan.FromMilliseconds(retryDelay));
                cfg.WithDeadLetterExchange(re);
            });

            var fq = bus.Advanced.QueueDeclare($"{subscription.Queue.Name}{Failed}");

            bus.Advanced.Bind(re, subscription.Queue, "");
            bus.Advanced.Bind(he, hq, "");
            bus.Advanced.Bind(fe, fq, "");

            return(Tuple.Create(he, fe, fq));
        }
 // CreateImageRequestEvent
 private void InitializeMessaging()
 {
     _consumer = _bus.SubscribeAsync <CreateImageRequestEvent>("Media", OnRequest);
 }