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); }); }
/// <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); // 如果没有回调,不能随意删除消息 }); } }); }
/// <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); }
/// <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); } }); }
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)); }
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); } }
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(); } }
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}"); }
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); }
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); }
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); }
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); }
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); } } }
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.. }
public void StopTrip(string TripID, int LoginID) { CacheImplementor.UpdateTrip(TripID, EventDef.STOPTRIP); tripRepos.StopTrip(TripID, LoginID); MQManager.PushTripStatus(TripID, EventDef.STOPTRIP); }