public void Reconnect() { RabbitToken.Dispose(); var newToken = BuildStrategy.ResubscribeConsumer(MessageBus, Queue); RabbitToken = newToken; }
public RabbitConsumer(IMessageBus messageBus, IConsumerBuildStrategy buildStrategy, RabbitConsumerOptions queue, ISubscriptionResult rabbitToken) { MessageBus = messageBus; BuildStrategy = buildStrategy; Queue = queue; RabbitToken = rabbitToken; }
/// <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(); } }); }
//异步接收消息 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)"); } })); }
//异步接收消息 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)"); } })); }
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; } }
public SubscriptionToken(RabbitModule module, ISubscriptionResult token, Guid id, string queueName, string topic) { _token = token; _id = id; _queueName = queueName; _topic = topic; _module = module; }
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); }
/// <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(); } }); }
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 => { }); }
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 => { }); }
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 => { }); }
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 => {})); }
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); }
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)); }
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)); }
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); }
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(); } })); }); }
public void Start(Func <EmailMessage, Task> callback) { subscriptionResult = bus.SubscribeAsync <EmailMessage>(options.SubscriptionId, callback); }
// CreateImageRequestEvent private void InitializeMessaging() { _consumer = _bus.SubscribeAsync <PurgeOldMediaRequestEvent>("Media", OnRequest); }
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); }