public override string Format(object oSource, string sCode, string sMessage, System.Exception oInnerException) { StringBuilder sNewMessage = new StringBuilder(); string sErrorStack = null; // if sPNR is not null or not empty, insert PNR into sMessage if (MessageExt != null && this.MessageExt != string.Empty) { sMessage = MessageExt.ToUpper() + " - " + sMessage; } // get the error stack, if InnerException is null, sErrorStack will be "exception was not chained" and should never be null sErrorStack = BuildErrorStack(oInnerException); // we want immediate gradification Trace.AutoFlush = true; sNewMessage.Append("Exception Summary \r\n") .Append("---------------------------------------------------------------------------------------\r\n") .Append(DateTime.Now.ToShortDateString()) .Append(":") .Append(DateTime.Now.ToShortTimeString()) .Append(" - ") .Append(sMessage) .Append("\r\n\r\n") .Append(sErrorStack); return(sNewMessage.ToString()); }
/// <summary>从指定队列拉取消息</summary> /// <param name="mq"></param> /// <param name="offset"></param> /// <param name="maxNums"></param> /// <param name="msTimeout"></param> /// <returns></returns> public PullResult Pull(MessageQueue mq, Int64 offset, Int32 maxNums, Int32 msTimeout = -1) { var header = new PullMessageRequestHeader { ConsumerGroup = Group, Topic = Topic, QueueId = mq.QueueId, QueueOffset = offset, MaxMsgNums = maxNums, SysFlag = 6, SubVersion = StartTime.ToLong(), }; if (msTimeout >= 0) { header.SuspendTimeoutMillis = msTimeout; } var st = _Queues.FirstOrDefault(e => e.Queue == mq); if (st != null) { header.CommitOffset = st.CommitOffset; } var dic = header.GetProperties(); var bk = GetBroker(mq.BrokerName); var rs = bk.Invoke(RequestCode.PULL_MESSAGE, null, dic, true); if (rs?.Header == null) { return(null); } var pr = new PullResult(); if (rs.Header.Code == 0) { pr.Status = PullStatus.Found; } else if (rs.Header.Code == (Int32)ResponseCode.PULL_NOT_FOUND) { pr.Status = PullStatus.NoNewMessage; } else if (rs.Header.Code == (Int32)ResponseCode.PULL_OFFSET_MOVED) { pr.Status = PullStatus.OffsetIllegal; } pr.Read(rs.Header?.ExtFields); // 读取内容 if (rs.Body != null && rs.Body.Length > 0) { pr.Messages = MessageExt.ReadAll(rs.Body).ToArray(); } return(pr); }
public ConsumeOrderlyStatus consumeMessage(List msgs, ConsumeOrderlyContext context) { try { var messageList = msgs.iterator(); while (messageList.hasNext()) { MessageExt msg = (MessageExt)messageList.next(); byte[] msgbody = msg.getBody(); string body = Encoding.UTF8.GetString(msgbody); Console.WriteLine("===> consumed msg :" + body); } } catch (Exception ex) { } return(ConsumeOrderlyStatus.SUCCESS); }
/// <summary>从指定队列拉取消息</summary> /// <param name="mq"></param> /// <param name="offset"></param> /// <param name="maxNums"></param> /// <param name="msTimeout"></param> /// <returns></returns> public PullResult Pull(MessageQueue mq, Int64 offset, Int32 maxNums, Int32 msTimeout = -1) { // 性能埋点 using var span = Tracer?.NewSpan($"mq:{Topic}:Consume"); try { var header = new PullMessageRequestHeader { ConsumerGroup = Group, Topic = Topic, QueueId = mq.QueueId, QueueOffset = offset, MaxMsgNums = maxNums, SysFlag = 6, SubVersion = StartTime.ToLong(), }; if (msTimeout >= 0) { header.SuspendTimeoutMillis = msTimeout; } var st = _Queues.FirstOrDefault(e => e.Queue == mq); if (st != null) { header.CommitOffset = st.CommitOffset; } var dic = header.GetProperties(); var bk = GetBroker(mq.BrokerName); var rs = bk.Invoke(RequestCode.PULL_MESSAGE, null, dic, true); if (rs?.Header == null) { return(null); } var pr = new PullResult(); if (rs.Header.Code == 0) { pr.Status = PullStatus.Found; } else if (rs.Header.Code == (Int32)ResponseCode.PULL_NOT_FOUND) { pr.Status = PullStatus.NoNewMessage; } else if (rs.Header.Code == (Int32)ResponseCode.PULL_OFFSET_MOVED || rs.Header.Code == (Int32)ResponseCode.PULL_RETRY_IMMEDIATELY) { pr.Status = PullStatus.OffsetIllegal; } else { pr.Status = PullStatus.Unknown; Log.Warn("响应编号:{0} 响应备注:{1} 序列编号:{2} 序列偏移量:{3}", rs.Header.Code, rs.Header.Remark, mq.QueueId, offset); } pr.Read(rs.Header?.ExtFields); // 读取内容 var pk = rs.Payload; if (pk != null) { pr.Messages = MessageExt.ReadAll(pk).ToArray(); } return(pr); } catch (Exception ex) { span?.SetError(ex, mq); throw; } }
public override void Handle(string name, string type) { OnNewTopic?.Invoke(MessageExt.GetRosTopic(name), MessageExt.GetRosType(type)); }