public TableWatcher(TableConfig config, ChainwayMQConfig mqconfig, ChainwayProducer producer) : base(config, mqconfig) { _producer = producer; _sender = producer; _helper.AutoCloseConnection = false; }
private void StartProducer(ChainwayMQConfig config) { var producer = MQFactory.CreatePushComsumer(config)[0]; producer.ConsumeMessage += Producer_ConsumeMessage; producer.Start(); }
public BaseWatcher(TableConfig tableconfig, ChainwayMQConfig mqconfig) { _mqConfig = mqconfig; _tableconfig = tableconfig; if (mqconfig != null && mqconfig.Top > 0) { _topn = mqconfig.Top; } }
protected int StartConsumer(ChainwayMQConfig config, PipeWorker worker) { ChainwayPullConsumer consumer; int count = 0; config.Topic.ForEach(p => { if (!_consumerDic.ContainsKey(config.Group)) { consumer = MQFactory.CreatePullComsumer(config.Group, config.Address, -1); _consumerDic[config.Group] = consumer; } else { consumer = _consumerDic[config.Group]; } if (!consumer.Connected) { consumer.Start(); } var messages = consumer.fetchSubscribeMessageQueues(p); var messagesTemp = messages.toArray(); long offset = 0; foreach (MessageQueue queue in messagesTemp) { offset = consumer.fetchConsumeOffset(queue, true); if (offset < 0) { offset = 0; } var result = consumer.pull(queue, "*", offset, 10000); if (result.getPullStatus() != PullStatus.FOUND) { continue; } var list = result.getMsgFoundList()?.toArray(); if (list == null) { continue; } foreach (Message item in list) { if (Consumer_ConsumeMessage(consumer.getConsumerGroup(), item, worker) == ConsumeConcurrentlyStatus.CONSUME_SUCCESS) { count++; consumer.UpdateOffset(queue, offset + 1); offset = result.getNextBeginOffset(); } else { break; } } } }); return(count); }
public void StartConsumer(ChainwayMQConfig config) { _consumer = MQFactory.CreatePushComsumer(config); _consumer.ForEach(t => { t.ConsumeMessage += Consumer_ConsumeMessage; _logger.Write(t.getNamesrvAddr()); t.start(); }); }
private void StartWatcher(ChainwayMQConfig t, ref int count) { while (true) { if (Stop) { break; } _logger.Write("正在准备连接服务器:" + t.ProxyIP); var config = _manager.Config.Find(p => p.Host.Equals(t.ProxyIP)); var worker = _manager.GetWorker(config); try { var hanlder = new PipeHandler(worker.Pipe); _workerDic[t.ProxyIP] = hanlder; _logger.Write("已连接,准备完成"); Ready(hanlder); _logger.Write("开始接收消息队列数据"); count = Consume(worker, Stop); _logger.Write("处理消息队列结束,准备发送结束信息"); SendFinish(hanlder); _logger.Write("服务器:" + t.ProxyIP + "发送了" + count.ToString() + "条消费消息"); _logger.Write("接收消息队列数据结束"); var produceconfig = MQFactory.Producerconfig.Find(p => p.ProxyIP.Equals(t.ProxyIP)); count = ReceiveMsg(hanlder, produceconfig, Stop); _logger.Write("从服务器:" + produceconfig.ProxyIP + "接受了" + count.ToString() + "生产消息,并推送到消息队列"); } catch (SocketException ex)//发生socket异常,重连 { _logger.WriteException(ex); Thread.Sleep(1000 * 10); worker.Close(); _manager.InitWorker(); } catch (TimeoutException ex)//发生超时异常,重连 { _logger.WriteException(ex); Thread.Sleep(1000 * 10); worker.Close(); _manager.InitWorker(); } catch (Exception ex) { _logger.WriteException(ex); _manager.InitWorker(); } Thread.Sleep(1000 * 5); } }
protected int ReceiveMsg(PipeHandler worker, ChainwayMQConfig config, bool stop = false) { int count = 0; while (true) { if (stop) { break; } string json = worker.Receive(120); if (string.IsNullOrEmpty(json)) { throw new TimeoutException("接收主机信息超时"); } Contract data = JsonHelper.Deserialize <Contract>(json); switch (data.Command) { case MessageTypeEnum.Work: Contract result = new Contract(); try { ChainwayProducer producer = GetProducer(config.Group, config.Address); foreach (var t in config.Topic) { ChainwayMessage msg = new ChainwayMessage(t); msg.setKeys(data.Keys); msg.setTags(data.Tags); msg.Body = data.Data; producer.send(msg); count++; _logger.Debug(string.Format("表{0}成功推送1条数据到消息队列,json:{1}", data.Keys, data.Data)); } result.Command = MessageTypeEnum.OK; } catch (Exception ex) { result.Command = MessageTypeEnum.Error; result.Message = ex.Message; _logger.WriteException(ex); } worker.Send(result); break; case MessageTypeEnum.End: return(count); } } return(count); }
public void StartTableWatcher(ChainwayMQConfig mqconfig) { if (_producer == null) { _logger.Write("准备监听mq"); _producer = MQFactory.CreateProducer(); _producer.start(); _logger.Write("mq监听完毕"); } _logger.Write("准备进入循环"); while (true) { foreach (var c in config) { try { //替换表名中的日期占位符 if (_tasks.ContainsKey(c.IDOrTableName)) { continue; } _logger.Write(string.Format("数据监视器正在启动,以监视表:{0}", c.IDOrTableName)); Task t = new Task(() => { try { TableWatcher watcher = new TableWatcher(c, mqconfig, _producer); _tasks[c.IDOrTableName] = watcher; watcher.Start(); } catch (Exception ex) { _logger.WriteException(ex); } }); t.Start(); _logger.Write(string.Format("数据监视器正在监视表:{0}", c.IDOrTableName)); } catch (Exception ex) { _logger.WriteException(ex); } } //休眠一小时 Thread.Sleep(1000 * 60 * 60); } }