Exemple #1
0
 public ApiClient(IMessageHandlerProvider messageHandlerProvider)
 {
     HttpClient = new HttpClient(messageHandlerProvider.NativeHandler)
     {
         BaseAddress = new Uri(BaseAddress)
     };
 }
 protected MessagePipelineBase(IMessageHandlerProvider messageHandlerProvider, ILifetimeScope lifetimeScope, IMessage message, Logger logger)
     : base(logger)
 {
     _messageHandlerProvider = messageHandlerProvider;
     LifetimeScope = lifetimeScope;
     Message = message;
 }
 protected Subscriber(IMessageHandlerProvider messageHandlerProvider, IRabbitConnection connection, IMessageFormatter messageFormatter, Logger logger)
     : base(logger)
 {
     MessageHandlerProvider = messageHandlerProvider;
     Connection = connection;
     Connection.ConnectionMade += ConnectionConnectionMade;
     Connection.ConnectionLost += ConnectionConnectionLost;
     MessageFormatter = messageFormatter;
 }
Exemple #4
0
 public LocalMessagePublisher(
     IServiceScopeFactory serviceScopeFactory,
     ILogger <LocalMessagePublisher> logger,
     IMessageHandlerProvider messageHandlerProvider)
     : base(serviceScopeFactory)
 {
     _logger = logger;
     _messageHandlerProvider = messageHandlerProvider;
 }
Exemple #5
0
        protected override void AddBrokerHandlers(IMessageHandlerProvider provider)
        {
            provider.RegisterConsumer <NotifyUserEvent, NotifyUserEventHandler>();
            provider.RegisterCommandConsumer <SetMessageType, SetTypeEventHandler>();

            provider.RegisterCommand <CreateRepostGroup>();
            provider.RegisterCommand <RepostCreated>();
            provider.RegisterCommand <SetMessageType>();
        }
Exemple #6
0
        protected override void AddBrokerHandlers(IMessageHandlerProvider provider)
        {
            provider.RegisterConsumer <LoginEvent, LoginEventHandler>();
            provider.RegisterConsumer <UserTokenRemoved, UserTokenRemovedHandler>();
            provider.RegisterConsumer <UserTokenChanged, UserTokenChangedHandler>();
            provider.RegisterCommandConsumer <CreateRepostGroup, RepostEventGroupCreatedHandler>();
            provider.RegisterCommandConsumer <RepostCreated, RepostedEventHandler>();
            provider.RegisterCommandConsumer <ExecuteNextRepost, RepostUserEventHandler>();

            provider.RegisterCommand <ExecuteNextRepost>();
            provider.RegisterCommand <RepostCreated>();
        }
 public DefaultMessageDispatcher(
     ITypeCodeProvider typeCodeProvider,
     IMessageHandlerProvider handlerProvider,
     IMessageHandleRecordStore messageHandleRecordStore,
     IOHelper ioHelper,
     ILoggerFactory loggerFactory)
 {
     _typeCodeProvider = typeCodeProvider;
     _handlerProvider = handlerProvider;
     _messageHandleRecordStore = messageHandleRecordStore;
     _ioHelper = ioHelper;
     _logger = loggerFactory.Create(GetType().FullName);
 }
 public DefaultMessageDispatcher(
     ITypeCodeProvider typeCodeProvider,
     IMessageHandlerProvider handlerProvider,
     IMessageHandleRecordStore messageHandleRecordStore,
     IOHelper ioHelper,
     ILoggerFactory loggerFactory)
 {
     _typeCodeProvider         = typeCodeProvider;
     _handlerProvider          = handlerProvider;
     _messageHandleRecordStore = messageHandleRecordStore;
     _ioHelper = ioHelper;
     _logger   = loggerFactory.Create(GetType().FullName);
 }
 public RabbitMqMessageSubscribe(
     IMessageHandlerManager messageHandlerManager,
     IMessageHandlerProvider messageHandlerProvider,
     IRabbitMqMessageConsumerFactory rabbitMqMessageConsumerFactory,
     IOptions <EventBusRabbitMqOptions> options,
     ILogger <RabbitMqMessageSubscribe> logger)
 {
     _messageHandlerManager          = messageHandlerManager;
     _messageHandlerProvider         = messageHandlerProvider;
     _rabbitMqMessageConsumerFactory = rabbitMqMessageConsumerFactory;
     _options = options;
     _logger  = logger;
     RabbitMqMessageConsumerDic            = new ConcurrentDictionary <string, IRabbitMqMessageConsumer>();
     messageHandlerManager.OnEventRemoved += SubsManager_OnEventRemoved;
 }
 public DefaultMessageDispatcher(
     ITypeNameProvider typeNameProvider,
     IMessageHandlerProvider handlerProvider,
     ITwoMessageHandlerProvider twoMessageHandlerProvider,
     IThreeMessageHandlerProvider threeMessageHandlerProvider,
     IOHelper ioHelper,
     ILoggerFactory loggerFactory)
 {
     _typeNameProvider            = typeNameProvider;
     _handlerProvider             = handlerProvider;
     _twoMessageHandlerProvider   = twoMessageHandlerProvider;
     _threeMessageHandlerProvider = threeMessageHandlerProvider;
     _ioHelper = ioHelper;
     _logger   = loggerFactory.Create(GetType().FullName);
 }
        /// <summary>
        /// 处理中消息邮箱
        /// </summary>
        /// <param name="businessKey">业务键</param>
        /// <param name="subscriber">订阅者</param>
        /// <param name="messageHandlerProvider">消息处理器提供者</param>
        /// <param name="processingMessageHandler">处理中消息处理器</param>
        /// <param name="continueWhenHandleFail">相同BusinessKey的消息处理失败后,是否继续推进</param>
        /// <param name="retryIntervalSeconds">重试间隔秒数(-1 表示不重试)</param>
        /// <param name="batchSize">批量处理大小</param>
        public DefaultProcessingMessageMailbox(
            string businessKey,
            string subscriber,
            IMessageHandlerProvider messageHandlerProvider,
            IProcessingMessageHandler processingMessageHandler,
            bool continueWhenHandleFail,
            int retryIntervalSeconds,
            int batchSize)
        {
            if (string.IsNullOrEmpty(businessKey))
            {
                throw new ArgumentNullException(nameof(businessKey));
            }
            _processingMessageDict     = new ConcurrentDictionary <long, ProcessingMessage>();
            _problemProcessingMessages = new ConcurrentDictionary <long, ProcessingMessageWithCreatedTime>();
            _logger            = LoggerManager.GetLogger(GetType());
            _nextSequence      = 1;
            _consumingSequence = 1;
            LastActiveTime     = DateTime.Now;
            Locker             = new SpinLock();

            BusinessKey               = businessKey;
            Subscriber                = subscriber;
            _messageHandlerProvider   = messageHandlerProvider;
            _processingMessageHandler = processingMessageHandler;
            _continueWhenHandleFail   = continueWhenHandleFail;
            if (retryIntervalSeconds != -1)
            {
                _retryIntervalSeconds = retryIntervalSeconds <= 0 ? 1 : retryIntervalSeconds;
                _retryEnabled         = true;
            }
            else
            {
                _retryIntervalSeconds = Int32.MaxValue;
                _retryEnabled         = false;
            }
            _batchSize        = batchSize <= 0 ? 1000 : batchSize;
            _ctsWhenDisposing = new CancellationTokenSource();
            if (_continueWhenHandleFail && _retryEnabled)
            {
                ProcessProblemMessage();
            }
        }
Exemple #12
0
        /// <summary>
        /// 默认消息处理器
        /// </summary>
        /// <param name="subscriber">订阅者</param>
        /// <param name="messageHandlerProvider">消息处理器提供者</param>
        /// <param name="mailboxProvider">Mailbox提供者</param>
        /// <param name="continueWhenHandleFail">相同BusinessKey的消息处理失败后,是否继续推进</param>
        /// <param name="retryIntervalSeconds">重试间隔秒数(-1 表示不重试)</param>
        /// <param name="mailboxEliminationStrategy">mailbox淘汰策略,默认为LFU</param>
        /// <param name="mailboxTimeoutSeconds">mailbox超时秒数</param>
        /// <param name="cleanInactiveMailboxIntervalSeconds">清理不活跃邮箱间隔秒数</param>
        /// <param name="batchSize">批量处理大小</param>
        public DefaultMessageProcessor(
            string subscriber,
            IMessageHandlerProvider messageHandlerProvider,
            IProcessingMessageMailboxProvider mailboxProvider,
            bool continueWhenHandleFail,
            int retryIntervalSeconds,
            IEliminationStrategy mailboxEliminationStrategy = null,
            int mailboxTimeoutSeconds = 600,
            int cleanInactiveMailboxIntervalSeconds = 10,
            int batchSize = 1000)
        {
            if (messageHandlerProvider == null)
            {
                throw new ArgumentNullException(nameof(messageHandlerProvider));
            }
            if (mailboxProvider == null)
            {
                throw new ArgumentNullException(nameof(mailboxProvider));
            }
            _mailboxDict = new ConcurrentDictionary <string, IProcessingMessageMailbox>();
            _logger      = LoggerManager.GetLogger(GetType());
            _cleanInactiveMailboxTimer = new Timer(CleanInactiveMailbox);

            _subscriber                          = subscriber;
            _messageHandlerProvider              = messageHandlerProvider;
            _mailboxProvider                     = mailboxProvider;
            _mailboxEliminationStrategy          = mailboxEliminationStrategy ?? new LfuStrategy();
            _eliminationKeyDict                  = new ConcurrentDictionary <string, bool>();
            _continueWhenHandleFail              = continueWhenHandleFail;
            _retryIntervalSeconds                = retryIntervalSeconds;
            _mailboxTimeoutSeconds               = mailboxTimeoutSeconds;
            _cleanInactiveMailboxIntervalSeconds = cleanInactiveMailboxIntervalSeconds;
            _batchSize = batchSize;

            _mailboxEliminationStrategy.OnKnockedOut += (sender, e) =>
            {
                foreach (var key in e.Keys)
                {
                    _eliminationKeyDict.TryAdd(key, false);
                }
            };
        }
Exemple #13
0
        public JoinedLobby(LobbyPlugin owner, LobbyDataPacket data, IMessageHandlerProvider client)
        {
            Data = data;
            client.SetHandler((ushort)OpCodes.LobbyMemberPropertyChanged, HandleMemberPropertyChanged);
            client.SetHandler((ushort)OpCodes.LeftLobby, HandleLeftLobbyMsg);
            client.SetHandler((ushort)OpCodes.LobbyChatMessage, HandleLobbyChatMessageMsg);
            client.SetHandler((ushort)OpCodes.LobbyMemberJoined, HandleLobbyMemberJoinedMsg);
            client.SetHandler((ushort)OpCodes.LobbyMemberLeft, HandleLobbyMemberLeftMsg);
            client.SetHandler((ushort)OpCodes.LobbyStateChange, HandleLobbyStateChangeMsg);
            client.SetHandler((ushort)OpCodes.LobbyStatusTextChange, HandleLobbyStatusTextChangeMsg);
            client.SetHandler((ushort)OpCodes.LobbyMemberChangedTeam, HandlePlayerTeamChangeMsg);
            client.SetHandler((ushort)OpCodes.LobbyMemberReadyStatusChange, HandleLobbyMemberReadyStatusChangeMsg);
            client.SetHandler((ushort)OpCodes.LobbyMasterChange, HandleLobbyMasterChangeMsg);
            client.SetHandler((ushort)OpCodes.LobbyPropertyChanged, HandleLobbyPropertyChanged);

            Properties = data.LobbyProperties;
            Members    = data.Players;
            Teams      = data.Teams;

            _lobbyServer = owner;
        }
 public NotifyController(IMessageHandlerProvider handlerProvider)
 {
     _provider = handlerProvider;
 }
Exemple #15
0
            public async Task <bool> HandleAsync(string subscriber, ProcessingMessage processingMessage, IMessageHandlerProvider messageHandlerProvider)
            {
                _queue.Enqueue(processingMessage);
                await Task.Delay(10);

                await processingMessage.CompleteAsync(new MessageExecutingResult(MessageExecutingStatus.Success, processingMessage.Message, subscriber));

                return(true);
            }
        // TODO: Do we allow handler reload? How can consistency be guaranteed for the remote routing system?
        private ValueTask ReloadHandlersAsync()
        {
            _messageHandlerProvider = null; // Volatile write op.

            return(default);
 public MessagePipeline(IMessageHandlerProvider messageHandlerProvider, IMessageFormatter messageFormatter, ILifetimeScope lifetimeScope, RabbitMessage rabbitMsg, Logger logger)
     : base(messageHandlerProvider, lifetimeScope, GetMessage(messageFormatter, rabbitMsg.Body), logger)
 {
 }
Exemple #18
0
        private HandlerFindResult GetMessageHandler(string subscriber, ProcessingMessage processingMessage, IMessageHandlerProvider messageHandlerProvider, out IDictionary <IMessage, IEnumerable <IMessageHandlerProxy> > messageHandlerProxyDict)
        {
            messageHandlerProxyDict = new Dictionary <IMessage, IEnumerable <IMessageHandlerProxy> >();
            var messageGroup = processingMessage.Message as MessageGroup;

            if (messageGroup != null)
            {
                if (messageGroup.Messages == null || !messageGroup.Messages.Any())
                {
                    return(HandlerFindResult.NoMessage);
                }
                foreach (var message in messageGroup.Messages)
                {
                    var messageType      = message.GetType();
                    var handlerProxyList = messageHandlerProvider.GetHandlers(messageType, subscriber);
                    if (handlerProxyList != null && handlerProxyList.Any())
                    {
                        messageHandlerProxyDict.Add(message, handlerProxyList);
                    }
                    else if (!messageGroup.NoHandlerAllowed)
                    {
                        messageHandlerProxyDict.Clear();
                        return(HandlerFindResult.NotFound);
                    }
                }
                return(HandlerFindResult.Found);
            }
            else
            {
                var messageType      = processingMessage.Message.GetType();
                var handlerProxyList = messageHandlerProvider.GetHandlers(messageType, subscriber);
                if (handlerProxyList == null || handlerProxyList.Count() == 0)
                {
                    return(HandlerFindResult.NotFound);
                }
                else
                {
                    messageHandlerProxyDict.Add(processingMessage.Message, handlerProxyList);
                    return(HandlerFindResult.Found);
                }
            }
        }
Exemple #19
0
 /// <summary>
 /// 创建邮箱
 /// </summary>
 /// <param name="businessKey">业务键</param>
 /// <param name="subscriber">订阅者</param>
 /// <param name="messageHandlerProvider">消息处理器提供者</param>
 /// <param name="continueWhenHandleFail">相同BusinessKey的消息处理失败后,是否继续推进</param>
 /// <param name="retryIntervalSeconds">重试间隔秒数(-1 表示不重试)</param>
 /// <param name="batchSize">批量处理大小</param>
 /// <returns></returns>
 public IProcessingMessageMailbox CreateMailbox(string businessKey, string subscriber, IMessageHandlerProvider messageHandlerProvider, bool continueWhenHandleFail, int retryIntervalSeconds, int batchSize)
 {
     return(new DefaultProcessingMessageMailbox(businessKey, subscriber, messageHandlerProvider, _processingMessageHandler, continueWhenHandleFail, retryIntervalSeconds, batchSize));
 }
Exemple #20
0
 protected abstract void AddBrokerHandlers(IMessageHandlerProvider provider);
Exemple #21
0
 protected override void AddBrokerHandlers(IMessageHandlerProvider provider)
 {
 }
 public RpcMessagePipeline(IMessageHandlerProvider messageHandlerProvider, ILifetimeScope lifetimeScope, IMessage message, Logger logger)
     : base(messageHandlerProvider, lifetimeScope, message, logger)
 {
 }
Exemple #23
0
        /// <summary>
        /// 处理
        /// </summary>
        /// <param name="subscriber">订阅者</param>
        /// <param name="processingMessage">处理中消息</param>
        /// <param name="messageHandlerProvider">消息处理器提供者</param>
        /// <returns></returns>
        public async Task <bool> HandleAsync(string subscriber, ProcessingMessage processingMessage, IMessageHandlerProvider messageHandlerProvider)
        {
            var message         = processingMessage.Message;
            var messageTypeName = message.GetMessageTypeName();

            var findResult = GetMessageHandler(subscriber, processingMessage, messageHandlerProvider, out IDictionary <IMessage, IEnumerable <IMessageHandlerProxy> > messageHandlerProxyDict);

            if (findResult == HandlerFindResult.Found)
            {
                return(await HandleInternal(subscriber, processingMessage, messageHandlerProxyDict).ConfigureAwait(false));
            }
            else if (findResult == HandlerFindResult.NotFound)
            {
                var warnMessage = $"No message handler found of message, businessKey: {message.BusinessKey}, subscriber: {subscriber}, messageId: {message.Id}, messageType: {messageTypeName}";
                await CompleteMessageAsync(subscriber, processingMessage, MessageExecutingStatus.HandlerNotFound, typeof(string).FullName, warnMessage).ConfigureAwait(false);

                return(true);
            }
            else
            {
                await CompleteMessageAsync(subscriber, processingMessage, MessageExecutingStatus.Success, string.Empty, string.Empty).ConfigureAwait(false);

                return(true);
            }
        }
        private static IEnumerable <RouteRegistration> GetRouteRegistrations(IMessageHandlerProvider messageHandlerProvider)
        {
            if (messageHandlerProvider == null)
            {
                throw new ArgumentNullException(nameof(messageHandlerProvider));
            }

            Route GetRoute(IMessageHandlerRegistration handlerRegistration)
            {
                return(new Route(handlerRegistration.MessageType.GetUnqualifiedTypeName()));
            }

            RouteRegistrationOptions GetRouteOptions(IMessageHandlerRegistration handlerRegistration)
            {
                var result = RouteRegistrationOptions.Default;

                if (handlerRegistration.IsPublishOnly())
                {
                    result |= RouteRegistrationOptions.PublishOnly;
                }

                if (handlerRegistration.IsTransient())
                {
                    result |= RouteRegistrationOptions.Transient;
                }

                if (handlerRegistration.IsLocalDispatchOnly())
                {
                    result |= RouteRegistrationOptions.LocalDispatchOnly;
                }

                return(result);
            }

            RouteRegistrationOptions CombineRouteOptions(IEnumerable <RouteRegistrationOptions> options)
            {
                var result = RouteRegistrationOptions.Default;

                var firstOption = true;

                foreach (var option in options)
                {
                    if (firstOption)
                    {
                        result = option;
                    }
                    else
                    {
                        result &= option;
                    }

                    firstOption = false;
                }

                return(result);
            }

            return(messageHandlerProvider
                   .GetHandlerRegistrations()
                   .GroupBy(GetRoute, (route, handlerRegistrations) => new RouteRegistration(route, CombineRouteOptions(handlerRegistrations.Select(GetRouteOptions)))));
        }
Exemple #25
0
 public SocketClient(string remoteName, IMessageHandlerProvider messageHandlerFactory)
 {
     Contract.Requires(messageHandlerFactory != null);
     this.RemoteName      = remoteName;
     this._messageHandler = messageHandlerFactory.Create();
 }
 public RpcServer(IMessageHandlerProvider messageHandlerProvider, RabbitMQ.Client.MessagePatterns.Subscription subscription, ConcurrentQueue<RabbitMessage> queue)
     : base(subscription)
 {
     _messageHandlerProvider = messageHandlerProvider;
     _queue = queue;
 }
 public MessageSubscriber(IMessageHandlerProvider messageHandlerProvider, IRabbitConnection connection, IMessageFormatter messageFormatter, Logger logger)
     : base(messageHandlerProvider, connection, messageFormatter, logger)
 {
 }