Exemple #1
0
        private static void Listener()
        {
            double currTmr = 0;

            MQManager.RegisterConnectionStatusEvent(new ConnectionStatus());
            UserSource us = new UserSource();
            int        i  = 1;

            MQManager.ReceiveGroupMessage((messageType, fromUserId, groupId, messageBytes) =>
            {
                if (!string.IsNullOrEmpty(groupId) && messageBytes != null && messageBytes.Length > 0)
                {
                    DateTime beforDT = System.DateTime.Now;

                    var userQueueSymbols = us.GetUserQueueSymbolList(fromUserId, groupId);
                    MQManager.SendMessage(userQueueSymbols, messageBytes);

                    DateTime afterDT = System.DateTime.Now;
                    TimeSpan ts      = afterDT.Subtract(beforDT);
                    currTmr         += ts.TotalMilliseconds;
                    Console.WriteLine(i + " current " + ts.TotalMilliseconds + " ms,total " + currTmr + " ms");
                }
                i++;
            }, (error) =>
            {
                Console.WriteLine(error);
            });
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BackGroundMessageMgr"/> class.
        /// 创建接受消息实例
        /// </summary>
        /// <param name="bussinessTypes">接受消息的所有bussinessTypes</param>
        public BackGroundMessageMgr(params string[] bussinessTypes)
        {
            Task.Run(() =>
            {
                // 订阅所有的routerKey
                foreach (var item in bussinessTypes)
                {
                    MQManager <SetBackGroudMessageArgs> .ConsumeRegister(
                        GetRouter(item),
                        GetQueue(item),
                        false,
                        (MQProtocol <SetBackGroudMessageArgs> m, Exception ex) =>
                    {
                        // if (ex != null)
                        // {
                        //    if (m != null)
                        //    {
                        // string msg = m.ToString();
                        // Console.WriteLine(msg);
                        // return true;
                        if (this.OnBackGroundMessageReceive != null)
                        {
                            return(this.OnBackGroundMessageReceive(m, ex));
                        }

                        // }
                        // }
                        return(false);    // 如果没有回调,不能随意删除消息
                    });
                }
            });
        }
Exemple #3
0
        /// <summary>
        /// 保存异步消息,并设置初始处理状态
        /// </summary>
        /// <param name="valueArgs">参数</param>
        /// <returns>是否成功</returns>
        public static bool SetMessage(SetBackGroudMessageArgs valueArgs)
        {
            var msg      = new MQProtocol <SetBackGroudMessageArgs>("SetBackGroudMessage", valueArgs, valueArgs.Args.rid);
            var routeKey = GetRouter(valueArgs.BussinessType);
            var mq       = MQManager <SetBackGroudMessageArgs> .Publish(msg, routeKey);

            if (!mq)
            {
                logger.LogError($"BackGroundMessageMgr.SetMessage.MQ.Error.rid = {valueArgs.Args.rid}");
                return(false);
            }

            logger.LogInformation($"BackGroundMessageMgr.SetMessage.MQ.Success.rid = {valueArgs.Args.rid}");

            var processMsg = new BackGroundMessageProcessResult() // 初始化一个未开始状态,所有值都为-1,表示还在队列中,未开始
            {
                ProcessNum = -1,
                SuccessNum = -1,
                TotalNum   = -1,
                Data       = string.Empty,
                Rid        = valueArgs.Args.rid,
            };

            return(SetProcessStatus(processMsg));
        }
        public static void SendNearGroupWelcome(int toUserId, string gruopGruid, List <string> groupUserImages, string content)
        {
            ChatGroupMessageBean model = new ChatGroupMessageBean()
            {
                groupGuid         = gruopGruid,
                groupUserImages   = groupUserImages,
                groupName         = "我的附近",
                content           = content,
                contentType       = MQConstant.CHAT_MESSAGE_CONTENT_TYPE_WELCOME_TIP,
                fromUserHeadImage = string.Empty,
                fromUserId        = 0,
                fromUserName      = string.Empty,
                sendTime          = DateTime.Now
            };

            byte[] userIdBytes  = BitConverter.GetBytes(model.fromUserId);
            byte[] groupIdBytes = Encoding.UTF8.GetBytes(model.groupGuid);
            byte[] contentBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(model));
            byte[] messageBytes = new byte[3 + userIdBytes.Length + groupIdBytes.Length + contentBytes.Length];

            messageBytes[0] = MQConstant.CHAT_GROUP_MESSAGE;
            messageBytes[1] = (byte)userIdBytes.Length;
            messageBytes[2] = (byte)groupIdBytes.Length;
            userIdBytes.CopyTo(messageBytes, 3);
            groupIdBytes.CopyTo(messageBytes, 3 + userIdBytes.Length);
            contentBytes.CopyTo(messageBytes, 3 + userIdBytes.Length + groupIdBytes.Length);

            MQManager.SendMessage(GetQueueName(toUserId), messageBytes);
        }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MQExtend{M}"/> class.
        ///  初始化一个消息队列
        /// </summary>
        /// <param name="routerKeys">routerKeys</param>
        /// <param name="hostName">hostName</param>
        public MQExtend(string hostName, params string[] routerKeys)
        {
            foreach (var itemKey in routerKeys)
            {
                MQManager <M> .ConsumeRegister(
                    GetRouter(itemKey, hostName),
                    GetQueue(itemKey, hostName),
                    false,
                    (MQProtocol <M> m, Exception ex) =>
                {
                    // if (ex != null)
                    // {
                    //    if (m != null)
                    //    {
                    // string msg = m.ToString();
                    // Console.WriteLine(msg);
                    // return true;
                    if (this.OnGrantMQMessageReceive != null)
                    {
                        return(this.OnGrantMQMessageReceive(m, ex));
                    }

                    // }
                    // }
                    return(false);    // 如果没有回调,不能随意删除消息
                });
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="BackGroundDirectMessage"/> class.
 /// 创建接受消息实例
 /// </summary>
 /// <param name="bussinessTypes">接受消息的所有bussinessTypes</param>
 public BackGroundDirectMessage(params MessageRouterMap[] messageRouterMap)
 {
     if (messageRouterMap?.Any(x => string.IsNullOrEmpty(x.BussinessApiName) || string.IsNullOrEmpty(x.MQRouterName)) ?? true)
     {
         throw new Exception("BackGroundDirectMessage构造函数的参数不合法");
     }
     Task.Run(() =>
     {
         // 订阅所有的routerKey
         foreach (var item in messageRouterMap)
         {
             MQManager <SetBackGroudMessageArgs> .ConsumeRegister(
                 GetRouter(item.MQRouterName), //点对点的消息,必须安装消息发布者的router和队列
                 GetQueue(item.MQRouterName),  //同上
                 false,
                 (MQProtocol <SetBackGroudMessageArgs> m, Exception ex, object objCtx) =>
             {
                 if (this.OnBackGroundMessageReceive != null)
                 {
                     return(this.OnBackGroundMessageReceive(m, ex, objCtx));
                 }
                 return(false);    // 如果没有回调,不能随意删除消息
             }, item.BussinessApiName);
         }
     });
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BackGroundFanoutMessage"/> class.
 /// 创建和初始化扇波的订阅方
 /// </summary>
 /// <param name="bussinessTypes">接受消息的所有bussinessTypes</param>
 public BackGroundFanoutMessage(params MessageRouterMap[] messageRouterMap)
 {
     if (messageRouterMap?.Any(x => string.IsNullOrEmpty(x.BussinessApiName) || string.IsNullOrEmpty(x.MQRouterName)) ?? true)
     {
         throw new Exception("BackGroundFanoutMessage构造函数的参数不合法");
     }
     Task.Run(() =>
     {
         // 订阅所有的routerKey
         foreach (var item in messageRouterMap)
         {
             MQManager <SetBackGroudMessageArgs> .FanoutConsumeRegister(
                 GetExchange(item.MQRouterName),
                 GetQueue(item.BussinessApiName),// 这里特殊,因为是扇波消息,所以这个队列是自己定义的特有的,所以用ApiName
                 false,
                 (MQProtocol <SetBackGroudMessageArgs> m, Exception ex, object objCtx) =>
             {
                 if (this.OnBackGroundMessageReceive != null)
                 {
                     return(this.OnBackGroundMessageReceive(m, ex, objCtx));
                 }
                 return(false);    // 如果没有回调,不能随意删除消息
             }, item.BussinessApiName);
         }
     });
 }
Exemple #8
0
        public bool SendMessage(MQProtocol <M> message, string hostName)
        {
            var routeKey = GetRouter(message.RouterKey, hostName);
            var host     = MQHostConfigManager.GetHost(hostName);

            return(MQManager <M> .Publish(message, routeKey, host));
        }
Exemple #9
0
 private void dealSubscribe()
 {
     try
     {
         for (int i = 0; i < topicQueue.Count; i++)
         {
             if (handler != null)
             {
                 if (MQIIIManager.Instance.IsStart)
                 {
                     string topic = topicQueue.Dequeue() as string;
                     if (!string.IsNullOrEmpty(topic))
                     {
                         MQManager.GetInstance().SubScribe(topic, this);
                         //handler.SubscribeTopics(new string[] { topic });
                         LogHelper.Debug(string.Format("topic:{0} subscribe success.", topic));
                     }
                 }
                 else
                 {
                     Thread.Sleep(1000);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LogHelper.Error(ex);
     }
 }
Exemple #10
0
        static void Main(string[] args)
        {
            var mqManager = new MQManager(new MqConfig
            {
                AutomaticRecoveryEnabled = true,
                HeartBeat = 60,
                NetworkRecoveryInterval = new TimeSpan(60),

                Host     = ConfigurationManager.AppSettings["mqhostname"],
                UserName = ConfigurationManager.AppSettings["mqusername"],
                Password = ConfigurationManager.AppSettings["mqpassword"],
                Port     = ConfigurationManager.AppSettings["mqport"]
            });

            if (mqManager != null && mqManager.Connected)
            {
                Console.WriteLine("RabbitMQ连接初始化成功。");
                Console.WriteLine("RabbitMQ消息接收中...");

                mqManager.Subscribe <PowerPointConvertMessage>(message =>
                {
                    if (message != null)
                    {
                        converter.OnWork(message);
                        Console.WriteLine(message.FileInfo);
                    }
                });
            }
            else
            {
                Console.WriteLine("RabbitMQ连接初始化失败,请检查连接。");
                Console.ReadLine();
            }
        }
Exemple #11
0
        private void PublishMessage_Load(object sender, EventArgs e)
        {
            MQManager mqManager = new MQManager();
            var       result    = mqManager.GetQueueReadyMessageCount("click_house");

            logger.LogInfo($"消费者数量:{result.consumerCount}");
            logger.LogInfo($"消息数量:{result.messageCount}");
        }
Exemple #12
0
        public MQManager GetConnection(InfoBroker infoBroker)
        {
            MQManager mqm = new MQManager(infoBroker);

            mqm.Connect();

            if (!mqm.IsConnected)
            {
                throw new Exception("No se pudo conectar al MQ.");
            }

            return(mqm);
        }
Exemple #13
0
        public void UpdateTripPersonStatus(string TripID, int EmployeeID, string Status, int UpdateUserId)
        {
            EventDef eventDef = EventDef.EMPLOYEESHOW;

            switch (Status.ToUpper().Trim())
            {
            case "NOSHOW":
                eventDef = EventDef.EMPLOYEENOSHOW;
                break;
            }
            CacheImplementor.UpdateTripShows(TripID, eventDef, EmployeeID);
            tripRepos.UpdateTripPersonStatus(TripID, EmployeeID, Status, UpdateUserId);
            MQManager.PushTripInfo(TripID, EmployeeID, eventDef);
        }
Exemple #14
0
        public T SendBroker <T>(dynamic json, int timeOut = 0)
        {
            var data = JsonConvert.SerializeObject(json);

            string _response = string.Empty;

            using (MQManager mqm = GetConnection(new InfoBroker()))
            {
                mqm.mtPutMessage(data);
                _response = mqm.mtGetMessage(timeOut);
            }

            return(JsonConvert.DeserializeObject <T>(_response));
        }
        /// <summary>
        /// 发现点对点消息
        /// </summary>
        /// <param name="valueArgs">参数</param>
        /// <returns>是否成功</returns>
        public static bool SetDirectMessage(SetBackGroudMessageArgs valueArgs)
        {
            var msg      = new MQProtocol <SetBackGroudMessageArgs>("SetDirectMessage", valueArgs, valueArgs.Args.rid);
            var routeKey = BackGroundDirectMessage.GetRouter(valueArgs.MQRouterName);
            var mq       = MQManager <SetBackGroudMessageArgs> .Publish(msg, routeKey);

            if (!mq)
            {
                logger.LogError($"SuperDirectMessageHelper.SetDirectMessage.MQ.Error.rid = {valueArgs.Args.rid}");
                return(false);
            }

            logger.LogInformation($"SuperDirectMessageHelper.SetDirectMessage.MQ.Success.rid = {valueArgs.Args.rid}");
            return(true);
        }
        /// <summary>
        /// 发送广播消息
        /// </summary>
        /// <param name="valueArgs">参数</param>
        /// <returns>是否成功</returns>
        public static bool SetFanoutMessage(SetBackGroudMessageArgs valueArgs)
        {
            var msg      = new MQProtocol <SetBackGroudMessageArgs>("SetFanoutMessage", valueArgs, valueArgs.Args.rid);
            var exChange = BackGroundFanoutMessage.GetExchange(valueArgs.MQRouterName);
            var mq       = MQManager <SetBackGroudMessageArgs> .PublishFanout(msg, exChange);

            if (!mq)
            {
                logger.LogError($"SuperMessageHelper.SetFanoutMessage.MQ.Error.rid = {valueArgs.Args.rid}");
                return(false);
            }

            logger.LogInformation($"SuperMessageHelper.SetFanoutMessage.MQ.Success.rid = {valueArgs.Args.rid}");
            return(true);
        }
        static void Main(string[] args)
        {
            WebSphereLibTest obj = new WebSphereLibTest();

            PartDeliveredMessage partDeliveredMessage = new PartDeliveredMessage();

            partDeliveredMessage.MessageType = MessageType.PartDelivered;
            partDeliveredMessage.RouteColor  = RouteColor.Red;
            partDeliveredMessage.PartNumber  = "100";
            partDeliveredMessage.Timestamp   = DateTime.Now;
            partDeliveredMessage.UID         = 1;

            string xmlPartDeliveredMessage = obj.SerializeObject <PartDeliveredMessage>(partDeliveredMessage);

            PartReorderMessage partReorderMessage = new PartReorderMessage();

            partReorderMessage.MessageType = MessageType.PartReorder;
            partReorderMessage.RouteColor  = RouteColor.Blue;
            partReorderMessage.PartNumber  = "101";
            partReorderMessage.Timestamp   = DateTime.Now;
            partReorderMessage.UID         = 1;

            string xmlPartReorderMessage = obj.SerializeObject <PartReorderMessage>(partReorderMessage);

            MQManager myMQ = new MQManager();

            string strQueueManagerName = string.Empty;
            string strQueueName        = string.Empty;
            string strChannelInfo      = string.Empty;
            string getQueueName        = string.Empty;
            string putQueueName        = string.Empty;
            string putText             = string.Empty;


            //strQueueManagerName = "queuemanager";
            //strQueueName = "omniIdQueue";
            //strChannelInfo = "SYSTEM.ADMIN.SVRCONN/TCP/192.168.10.221(1414)";
            //getQueueName = "omniIdQueue";
            //putQueueName = "omniIdQueue";
            //putText = xmlPartDeliveredMessage;

            //var connectStatus = myMQ.ConnectMQ(strQueueManagerName, strChannelInfo);


            //var writeStatus = myMQ.WriteLocalQMsg(putText, putQueueName);
            //var getStatus = myMQ.ReadLocalQMsg(getQueueName);
        }
        public static void SendLogoutMessage(int userId, string token, string hintContent)
        {
            var model = new
            {
                userId      = userId,
                token       = token,
                loginTime   = DateTime.Now,
                hintContent = hintContent
            };

            byte[] contentBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(model));
            byte[] messageBytes = new byte[1 + contentBytes.Length];

            messageBytes[0] = MQConstant.USER_LOGOUT_MESSAGE;
            contentBytes.CopyTo(messageBytes, 1);

            MQManager.SendMessage(GetQueueName(userId), messageBytes);
        }
Exemple #19
0
        public OpResponse ForgotPassword(string LoginId)
        {
            OpResponse    OpResponse = new OpResponse();
            LoginResponse lr         = loginRepos.GetUserByID(LoginId);

            if (lr != null)
            {
                OpResponse.IsSuccess = true;
                OpResponse.OpMsg     = string.Format("Email sent to {0}", lr.Email);
                MQBatchRequest batchRequest = new MQBatchRequest()
                {
                    EventType   = EventDef.FORGOTPASSWORD,
                    MessageData = lr
                };
                MQManager.QueueEmployeeUpdate(batchRequest);
            }
            else
            {
                OpResponse.IsSuccess = false;
                OpResponse.OpMsg     = "User not exists";
            }
            return(OpResponse);
        }
Exemple #20
0
        const int GROUP_MESSAGE_COUNT = 1000; //每个组里面的消息数量

        public static void AddGroupMessage()
        {
            for (int i = 1; i < GROUP_COUNT; i++)
            {
                for (int j = 1; j <= GROUP_MESSAGE_COUNT; j++)
                {
                    var model = new MessageModel()
                    {
                        GroupId     = "group-guid-" + i,
                        Content     = "group message test " + j,
                        ContentType = 1,
                        FromUserId  = 1,
                        MessageType = 1,
                    };
                    byte[] groupIdBytes = Encoding.UTF8.GetBytes(model.GroupId);
                    byte[] msgBytes1    = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(model));
                    byte[] msgBytes     = new byte[msgBytes1.Length + groupIdBytes.Length + 1];
                    msgBytes[0] = (byte)groupIdBytes.Length;
                    groupIdBytes.CopyTo(msgBytes, 1);
                    msgBytes1.CopyTo(msgBytes, groupIdBytes.Length + 1);
                    MQManager.SendMessage(MQManager.GROUP_QUEUE_NAME, msgBytes);
                }
            }
        }
Exemple #21
0
        internal void Loop()
        {
            try
            {
                MessageQueue queue = MQManager.GetQueue(_queueName, QueueAccessMode.Receive);

                if (queue.CanRead == false)
                {
                    throw new InvalidOperationException("Unable to read from queue [" + _queueName + "]");
                }
                else
                {
                    //  Logger.Log(null, "Queue {0} open and can read", _queueName);
                }

                string queueAddress = queue.Path;

                while (StopService == false)
                {
                    while (Listen == true)
                    {
                        int i = 0;
                        while (i < _threadInfo.Count)
                        {
                            ThreadInfo <TBatchProcessor> threadInfo = _threadInfo[i];
                            if (threadInfo.Processor.Completed == true)
                            {
                                threadInfo.Thread.Abort();
                                _threadInfo.RemoveAt(i);
                            }
                            else
                            {
                                i++;
                            }
                        }

                        if (_threadInfo.Count < _maxThreads)
                        {
                            try
                            {
                                Message       msg          = queue.Receive(PollingInterval);
                                TBatchRequest batchRequest = (TBatchRequest)msg.Body;

                                TBatchProcessor processor = new TBatchProcessor();
                                processor.SetBatchRequest(batchRequest);

                                Thread thread = new Thread(processor.Process);
                                thread.Start();

                                ThreadInfo <TBatchProcessor> threadInfo = new ThreadInfo <TBatchProcessor>(processor, thread);
                                _threadInfo.Add(threadInfo);
                            }
                            catch (MessageQueueException mqEx)
                            {
                                switch (mqEx.MessageQueueErrorCode)
                                {
                                case MessageQueueErrorCode.IOTimeout:
                                    // all good, no message to get
                                    break;

                                default:
                                    throw;
                                }
                            }
                        }
                        else
                        {
                            // all threads loaded up, so wait a bit before seeing if we can remove any again
                            Thread.Sleep(PollingInterval);
                        }
                    }
                    // check stopping
                    if (StopService == true)
                    {
                        break;
                    }
                    //Logger.Log("StopService is {0}", StopService.ToString());
                }
            }
            catch (Exception e)
            {
                //throw;
            }
            Thread.CurrentThread.Abort(); // kill me now..
        }
Exemple #22
0
 public void StopTrip(string TripID, int LoginID)
 {
     CacheImplementor.UpdateTrip(TripID, EventDef.STOPTRIP);
     tripRepos.StopTrip(TripID, LoginID);
     MQManager.PushTripStatus(TripID, EventDef.STOPTRIP);
 }