public void Serialize2() { try { var id = Guid.NewGuid().ToString("N").ToUpper(); IMessageItem message = new MessageItem { ID = id, State = MessageState.Accept, Service = "Topic", Method = "Title", Argument = @"{""Value"": ""Content""}", Result = @"{""Value"": ""Result""}" }; SmartSerializer.SerializeMessage(message); DateTime start = DateTime.Now; for (int i = 0; i < short.MaxValue; i++) { SmartSerializer.SerializeMessage(message); } var time = (DateTime.Now - start).TotalSeconds; Console.WriteLine($"{time}s {short.MaxValue / time} qps"); Assert.IsTrue(time < 2, "性能不好"); } catch (Exception ex) { Assert.Fail($"发生异常\n{ex}"); } }
public void Serialize() { try { var id = Guid.NewGuid().ToString("N").ToUpper(); IMessageItem message = new MessageItem { ID = id, State = MessageState.Accept, Service = "Topic", Method = "Title", Argument = @"{""Value"": ""Content""}", Result = @"{""Value"": ""Result""}" }; var json = SmartSerializer.SerializeMessage(message); Console.WriteLine(json); var message2 = SmartSerializer.ToMessage(json); Assert.IsTrue(message2.ID == message.ID, json); Assert.IsTrue(message2.State == message.State, json); Assert.IsTrue(message2.Service == message.Service, json); Assert.IsTrue(message2.Argument == message.Argument, json); Assert.IsTrue(message2.Result == message.Result, json); Assert.IsTrue(message2.TraceInfo.LocalMachine == message.TraceInfo.LocalMachine, json); } catch (Exception ex) { Assert.Fail($"发生异常\n{ex}"); } }
protected override TaskCompletionSource <IMessageResult> DoPost(QueueItem item) { Logger.Trace(() => $"[异步消息投递] {item.ID} 正在投递消息.{RedisOption.Instance.ConnectionString}"); var res = new TaskCompletionSource <IMessageResult>(); client .PublishAsync(item.Message.Service, SmartSerializer.SerializeMessage(item.Message)) .ContinueWith(task => { if (task.IsFaulted) { Logger.Trace(() => $"[异步消息投递] {item.ID} 发生异常({task.Exception.Message})"); res.TrySetResult(new MessageResult { ID = item.Message.ID, Trace = item.Message.TraceInfo, State = MessageState.NetworkError }); } else if (task.IsFaulted) { Logger.Trace(() => $"[异步消息投递] {item.ID} 操作取消"); res.TrySetResult(new MessageResult { ID = item.Message.ID, Trace = item.Message.TraceInfo, State = MessageState.Cancel }); } else { Logger.Trace(() => $"[异步消息投递] {item.ID} 投递成功"); res.TrySetResult(new MessageResult { ID = item.Message.ID, Trace = item.Message.TraceInfo, State = MessageState.Success }); } }); return(res); }
/// <summary> /// 生产消息 /// </summary> /// <param name="message">消息</param> /// <returns></returns> Task <IMessageResult> IMessagePoster.Post(IInlineMessage message) { message.Offline(); var item = new ConsulQueueItem { ID = message.ID, Name = message.Topic, }; message.ID = null; message.Topic = null; message.Trace = null; item.Message = SmartSerializer.SerializeMessage(message).ToUtf8Bytes(); redisQueues.Enqueue(item); semaphore.Release(); message.RealState = MessageState.AsyncQueue; LogRecorder.MonitorDetails("[ConsulPoster.Post] 消息已投入发送队列,将在后台静默发送直到成功"); return(Task.FromResult <IMessageResult>(null));//直接使用状态 }