示例#1
0
 private void LimitedMessageHandler(IChannelHandlerContext contex, MsgProtoPacket msg)
 {
     if (msg.Subject == _subscriptionConfig.Inbox &&
         msg.Subject == _subscriptionConfig.Subject)
     {
         if (_messageHandlerCounter < _subscriptionConfig.MaxMsg)
         {
             try
             {
                 MessageHandler(msg, _messageAckCallback);
                 _messageHandlerCounter++;
             }
             catch (Exception ex)
             {
                 _logger.LogError(ex, $"[SubscriptionMessageHandler]消息处理发生异常 主题 {_subscriptionConfig.Subject}");
             }
         }
         else
         {
             _unSubscriptionCallback(_subscriptionConfig);
         }
     }
     else
     {
         contex.FireChannelRead(msg);
     }
 }
        /// <summary>
        /// 发送消息成功处理确认
        /// </summary>
        /// <param name="subscriptionConfig">订阅配置</param>
        /// <param name="msg">消息</param>
        /// <param name="isAck">是否确认</param>
        private async Task AckAsync(STANSubscriptionConfig subscriptionConfig, MsgProtoPacket msg, bool isAck = true)
        {
            if (isAck)
            {
                var _channel = await ConnectAsync();

                await _channel.WriteAndFlushAsync(new AckPacket(subscriptionConfig.AckInbox, msg.Message.Subject, msg.Message.Sequence));
            }
        }
示例#3
0
 protected STANMsgContent PackMsgContent(MsgProtoPacket msg)
 {
     return(new STANMsgContent()
     {
         Sequence = msg.Message.Sequence,
         Subject = msg.Message.Subject,
         Reply = msg.Message.Reply,
         Data = msg.Message.Data.ToByteArray(),
         Timestamp = msg.Message.Timestamp,
         Redelivered = msg.Message.Redelivered,
         CRC32 = msg.Message.CRC32
     });
 }
示例#4
0
 protected override void MessageHandler(MsgProtoPacket msg, Func <STANSubscriptionConfig, MsgProtoPacket, bool, Task> ackCallback)
 {
     Task.Factory.StartNew(async _msg =>
     {
         try
         {
             var current_msg = _msg as MsgProtoPacket;
             _messageHandler(PackMsgContent(current_msg));
             await ackCallback(_subscriptionConfig, current_msg, true);
         }
         catch (Exception ex)
         {
             _logger.LogError(ex, "消息处理发生异常");
         }
     },
                           msg,
示例#5
0
 protected override void ChannelRead0(IChannelHandlerContext contex, MsgProtoPacket msg)
 {
     _channelRead(contex, msg);
 }
示例#6
0
 protected abstract void MessageHandler(MsgProtoPacket msg, Func <STANSubscriptionConfig, MsgProtoPacket, bool, Task> ackCallback);