Beispiel #1
0
        public static string GetHandlerSenderTypeName(MessageGroupAttribute messageGroup)
        {
            switch (messageGroup)
            {
            case MessageGroupToServerAttribute _: return(sessionTypeName);

            case MessageGroupToClientAttribute _: return(senderTypeName);

            default: throw new ArgumentException(nameof(messageGroup));
            }
        }
        private void TryCreateMessageConsumer(Type eventType)
        {
            var exchangeName = _options.Value.ExchangeName;
            var queueName    = MessageGroupAttribute.GetGroupOrDefault(eventType);
            var key          = $"{exchangeName}_{queueName}";

            lock (_lock)
            {
                if (!RabbitMqMessageConsumerDic.TryGetValue(key, out var rabbitMqMessageConsumer))
                {
                    rabbitMqMessageConsumer = _rabbitMqMessageConsumerFactory.Create(
                        new RabbitMqExchangeDeclareConfigure(exchangeName, "direct"),
                        new RabbitMqQueueDeclareConfigure(queueName));
                    rabbitMqMessageConsumer.OnMessageReceived(Consumer_Received);
                    RabbitMqMessageConsumerDic.TryAdd(key, rabbitMqMessageConsumer);
                }
                var eventName = MessageNameAttribute.GetNameOrDefault(eventType);
                rabbitMqMessageConsumer.BindAsync(eventName);
            }
        }
        private void SubsManager_OnEventRemoved(object sender, Type messageType)
        {
            var exchangeName = _options.Value.ExchangeName;
            var queueName    = MessageGroupAttribute.GetGroupOrDefault(messageType);
            var key          = $"{exchangeName}_{queueName}";

            lock (_lock)
            {
                if (!RabbitMqMessageConsumerDic.TryGetValue(key, out var rabbitMqMessageConsumer))
                {
                    return;
                }
                var eventName = MessageNameAttribute.GetNameOrDefault(messageType);
                rabbitMqMessageConsumer.UnbindAsync(eventName);
                if (rabbitMqMessageConsumer.HasRoutingKeyBindingQueue())
                {
                    return;
                }
                rabbitMqMessageConsumer.Dispose();
                RabbitMqMessageConsumerDic.TryRemove(key, out _);
            }
        }