コード例 #1
0
 public void ExtuteMQ <T>(MQEnum Type) where T : new()
 {
     Task.Run(() =>
     {
         AcceptEntity accept = new AcceptEntity();
         if (Type == MQEnum.Push)
         {
             accept.SendType     = MQEnum.Push;
             accept.ExchangeName = "Message.Direct";
             accept.QueeName     = "Meesage.DirectQuene";
             accept.RouteName    = "RouteKey";
         }
         else if (Type == MQEnum.Sub)
         {
             accept.SendType     = MQEnum.Sub;
             accept.ExchangeName = "Message.Fanout";
             accept.QueeName     = "Meesage.FanoutQuene";
         }
         else
         {
             accept.SendType     = MQEnum.Top;
             accept.ExchangeName = "Message.Topic";
             accept.QueeName     = "Meesage.FanoutQuene";
             accept.RouteName    = "RouteKey";
         }
         MQFactory.Subscriber <Accept, T>(accept);
     });
 }
コード例 #2
0
ファイル: PipeProxyV2.cs プロジェクト: mazhufeng/DataSync
        private void StartProducer(ChainwayMQConfig config)
        {
            var producer = MQFactory.CreatePushComsumer(config)[0];

            producer.ConsumeMessage += Producer_ConsumeMessage;
            producer.Start();
        }
コード例 #3
0
 public override void Open()
 {
     if (_producer == null)
     {
         _producer = MQFactory.CreateProducer();
         _producer.start();
     }
 }
コード例 #4
0
ファイル: PipeProxy.cs プロジェクト: mazhufeng/DataSync
        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);
        }
コード例 #5
0
ファイル: ConsumerManager.cs プロジェクト: mazhufeng/DataSync
 public void StartConsumer(ChainwayMQConfig config)
 {
     _consumer = MQFactory.CreatePushComsumer(config);
     _consumer.ForEach(t =>
     {
         t.ConsumeMessage += Consumer_ConsumeMessage;
         _logger.Write(t.getNamesrvAddr());
         t.start();
     });
 }
コード例 #6
0
ファイル: Form1.cs プロジェクト: mazhufeng/DataSync
        private void btnConsume_Click(object sender, EventArgs e)
        {
            var consumer = MQFactory.CreatePushComsumer();

            consumer.ForEach(t =>
            {
                t.ConsumeMessage += Consumer_ConsumeMessage;
                t.start();
            });
            MessageBox.Show("listener started");
        }
コード例 #7
0
        public ProjectInstaller()
        {
            InitializeComponent();
            FileInfo file = new FileInfo(this.GetType().Assembly.Location);

            MQFactory.LoadConfig(file.Directory.FullName);
            //System.IO.Directory.SetCurrentDirectory(System.AppDomain.Cur‌​rentDomain.BaseDirec‌​tory);
            if (!string.IsNullOrEmpty(MQFactory.Consumerconfig[0].ServiceName))
            {
                this.serviceInstaller1.ServiceName = this.serviceInstaller1.DisplayName = MQFactory.Consumerconfig[0].ServiceName;
            }
        }
コード例 #8
0
ファイル: Form1.cs プロジェクト: mazhufeng/DataSync
        private void btnProduce_Click(object sender, EventArgs e)
        {
            var producer = MQFactory.CreateProducer();

            producer.start();

            producer.send(new ChainwayMessage("syncdata-100-7")
            {
                Body = txbProduce.Text
            });
            producer.shutdown();
        }
コード例 #9
0
        static void Main(string[] args)
        {
            var a = DateTime.Now;

            Console.WriteLine("Hello World!");

            var    mq   = MQFactory.GetMQ();
            Action act1 = () => { Test1(); };
            Action act2 = () => { Test2(); };

            mq.JoinQueue("test", act2, null);
            mq.JoinQueue("test", act1, null);

            Console.ReadKey();
        }
コード例 #10
0
ファイル: WatcherManager.cs プロジェクト: mazhufeng/DataSync
        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);
            }
        }
コード例 #11
0
ファイル: PipeProxy.cs プロジェクト: mazhufeng/DataSync
        public ChainwayProducer GetProducer(string groupName, string nameAddress)
        {
            ChainwayProducer producer = null;

            if (_producerDic.ContainsKey(groupName))
            {
                producer = _producerDic[groupName];
            }
            else
            {
                producer = MQFactory.CreateProducer(groupName, nameAddress, -1);
                _producerDic[groupName] = producer;
                producer.start();
            }
            return(producer);
        }
コード例 #12
0
        public void RunRepServer()
        {
            var    s    = MQFactory.MakeRepServer("tcp://127.0.0.1:18848");
            int    cc   = 0;
            string exit = "";

            s.Respose = (r) =>
            {
                cc++;
                exit = r;
                string re = "";
                if (cc >= 10)
                {
                    re = "exit";
                }
                else
                {
                    int t = 0;
                    if (int.TryParse(r, out t))
                    {
                        if (t % 2 == 0)
                        {
                            re = string.Format("{0} is Even.", t);
                        }
                        else
                        {
                            re = string.Format("{0} is Odd.", t);
                        }
                    }
                    else
                    {
                        re = "Not a Number::" + r;
                    }
                }
                Console.WriteLine("次数:" + cc);
                Console.WriteLine("收到:" + r);
                Console.WriteLine("回复:" + re);
                return(re);
            };
            while (exit != "exit")
            {
                Thread.Sleep(100);
            }
        }
コード例 #13
0
ファイル: RpcServer.cs プロジェクト: Aqmic/Dcp.Lib
 public RpcServer(DistributedMQConfig distributedMQConfig, IList <string> routeKeyList, string applicationId) : base(distributedMQConfig)
 {
     this.MQConfig = distributedMQConfig;
     this.MsgQueue = MQFactory.Create(distributedMQConfig, MessageQueueTypeEnum.RabbitMq, routeKeyList, applicationId);
     this.MsgQueue.ReceiveMQ(delegate(MQMessage msg) {
         if ((msg != null) && (msg.Response != null))
         {
             MQMsgRequest request1 = new MQMsgRequest {
                 Exchange        = msg.Response.Exchange,
                 RequestRouteKey = msg.Response.ResponseRouteKey
             };
             msg.Request  = request1;
             msg.Response = null;
         }
         if (this.ReciveMsgedEvent != null)
         {
             this.ReciveMsgedEvent(msg);
         }
     });
 }
コード例 #14
0
        public RpcClient(DistributedMQConfig distributedMQConfig, MQMsgRequest mQMsgRequest = null, string applicationId = null) : base(distributedMQConfig)
        {
            this.ApplicationId = applicationId;
            this.MQConfig      = distributedMQConfig;
            this.MsgQueue      = MQFactory.Create(this.MQConfig, MessageQueueTypeEnum.RabbitMq, null, applicationId);

            if (!string.IsNullOrEmpty(this.MQConfig.ProducerID))
            {
                this.MsgQueue.DeleteMQ(this.MQConfig.ProducerID, true, true);
            }

            string str = IdentityHelper.NewSequentialGuid().ToString("N");

            if (string.IsNullOrEmpty(this.MQConfig.Exchange))
            {
                this.MQConfig.Exchange = MQDefaultSetting._Exchange;
            }
            MQMsgResponse response1 = new MQMsgResponse
            {
                Exchange         = this.MQConfig.Exchange,
                ResponseQueue    = MQDefaultSetting._prefixQueue + "-" + str,
                ResponseRouteKey = str
            };

            this._mQMsgResponse = response1;
            if (mQMsgRequest == null)
            {
                MQMsgRequest request1 = new MQMsgRequest
                {
                    Exchange        = this.MQConfig.Exchange,
                    RequestRouteKey = MQDefaultSetting._RequestRouteKey
                };
                this._mQMsgRequest = request1;
            }
            else
            {
                this._mQMsgRequest = mQMsgRequest;
            }
        }
コード例 #15
0
 private static void fileWatcher_Changed(object sender, FileSystemEventArgs e)
 {
     MQFactory.LoadConfig();
 }
コード例 #16
0
ファイル: ErrorWatcher.cs プロジェクト: mazhufeng/DataSync
        public void Start()
        {
            MQFactory.LoadConfig();
            while (!IsStop)
            {
                try
                {
                    var table = GetTopNData(MQFactory.Producerconfig[0].Top);
                    if (table.Rows.Count > 0)
                    {
                        var list = table.ToList <T_Sync_Temp>();
                        list = (from l in list
                                orderby l.Address
                                select l).ToList();
                        string           currentAddress = null;
                        ChainwayProducer producer       = null;
                        foreach (var data in list)
                        {
                            if (string.IsNullOrEmpty(currentAddress))
                            {
                                currentAddress = data.Address;
                            }
                            if (!currentAddress.Equals(data.Address))
                            {
                                if (producer != null)
                                {
                                    producer.shutdown();
                                }
                                producer = new ChainwayProducer(data.Group);
                                producer.setNamesrvAddr(data.Address);
                                producer.start();
                            }
                            else if (producer == null)
                            {
                                producer = new ChainwayProducer(data.Group);
                                producer.setNamesrvAddr(data.Address);
                                producer.start();
                            }
                            var topics = data.Topic.Split(',');
                            foreach (var t in topics)
                            {
                                ChainwayMessage msg = new ChainwayMessage(t);
                                msg.Body = data.Data;
                                msg.setKeys(data.TableName);
                                msg.setTags(data.Tags);
                                producer.Send(msg);
                            }

                            currentAddress = data.Address;
                        }
                        if (producer != null)
                        {
                            producer.shutdown();
                        }
                    }
                    else
                    {
                        Thread.Sleep(10 * 1000);
                    }
                }
                catch (Exception ex)
                {
                    _logger.WriteException(ex);
                    Thread.Sleep(10 * 1000);
                }
            }
        }