예제 #1
0
        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}");
            }
        }
예제 #2
0
        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}");
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        /// <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));//直接使用状态
        }