public static RabbitMQBuilder AddRabbitMQFactory(this IServiceCollection services, Action <RabbitMQFactoryBuilder> action)
        {
            var factory = RabbitMQFactory.Create(action);

            services.AddSingleton(RabbitMQFactory.Create(action));
            return(new RabbitMQBuilder(services, factory));
        }
예제 #2
0
        /// <summary>
        /// Publishes an integration event using RabbitMQ basic publish
        /// Uses default retry policy configured on app
        /// </summary>
        /// <typeparam name="TEvent">IntegrationEvent</typeparam>
        /// <param name="event">Integration event to be published</param>
        public void Publish <TEvent>(TEvent @event)
            where TEvent : IntegrationEvent
        {
            if (!_connection.IsConnected)
            {
                _connection.TryConnect();
            }

            using (var channel = _connection.CreateModel())
            {
                channel.ExchangeDeclare(
                    exchange: EXCHANGE_NAME,
                    type: Enum.GetName(typeof(RabbitMQExchangeType), _exchangeType).ToLower());

                var message = JsonConvert.SerializeObject(@event);
                var body    = Encoding.UTF8.GetBytes(message);

                RabbitMQFactory.GetDefaultRetryPolicy(_logger, _retryCount)
                .Execute((Action)(() =>
                {
                    channel.BasicPublish(
                        exchange: EXCHANGE_NAME,
                        routingKey: @event.GetType().Name,
                        body: body);
                }));
            }
        }
        public bool TryConnect()
        {
            _logger.LogInformation("RabbitMQ Client is trying to connect");

            lock (sync_root)
            {
                RabbitMQFactory.GetDefaultRetryPolicy(_logger, _retryCount)
                .Execute(() => _connection = _connectionFactory.CreateConnection());

                if (IsConnected)
                {
                    _connection.ConnectionShutdown += OnConnectionShutdown;
                    _connection.CallbackException  += OnCallbackException;
                    _connection.ConnectionBlocked  += OnConnectionBlocked;

                    _logger.LogInformation($"RabbitMQ persistent connection acquired a connection {_connection.Endpoint.HostName} and is subscribed to failure events");

                    return(true);
                }
                else
                {
                    _logger.LogCritical("FATAL ERROR: RabbitMQ connections could not be created and opened");

                    return(false);
                }
            }
        }
예제 #4
0
        static void Main(string[] args)
        {
            //string type = "simple"; // 简单队列
            string type = "work"; // 工作队列

            var rabbitMQService = RabbitMQFactory.CreateRabbitMQService(type);

            rabbitMQService.Receive();

            Console.ReadKey();
        }
예제 #5
0
        static void Main(string[] args)
        {
            //string type = "simple"; // 简单队列
            string type = "work"; // 工作队列

            string message = "a.b.c.d.e.f!";

            var rabbitMQService = RabbitMQFactory.CreateRabbitMQService(type);

            rabbitMQService.Publish(message);

            Console.ReadLine();
        }
예제 #6
0
        private void InitializeRabbitModel()
        {
            model = RabbitMQFactory.CreateRabbitModel(Configuration);
            model.QueueDeclare(queue: MensageriaServiceConsts._QUEUE_KEY,
                               durable: false,
                               exclusive: false,
                               autoDelete: false,
                               arguments: null);
            var consumer = new EventingBasicConsumer(model);

            consumer.Received += Consumer_Received;
            model.BasicConsume(queue: MensageriaServiceConsts._QUEUE_KEY,
                               consumer: consumer);
        }
        public RabbitMQPersistentConnection(
            IOptions <RabbitMQConfiguration> options,
            ILogger <RabbitMQPersistentConnection> logger
            )
        {
            var config = options?.Value ?? throw new ArgumentNullException("RabbitMQ configuration not found on host!");

            if (!config.IsValid())
            {
                throw new ArgumentException("RabbitMQ configuration is not valid");
            }

            _connectionFactory = RabbitMQFactory.GetConnectionFactory(config);
            _logger            = logger ?? throw new ArgumentNullException(nameof(logger));
            _retryCount        = config.RetryCount ?? 5;
        }
예제 #8
0
        public void SendMessage(MessageContent content)
        {
            if (content == null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            using (var model = RabbitMQFactory.CreateRabbitModel(Configuration))
            {
                model.QueueDeclare(queue: MensageriaServiceConsts._QUEUE_KEY,
                                   durable: false,
                                   exclusive: false,
                                   autoDelete: false,
                                   arguments: null);
                string json = JsonConvert.SerializeObject(content);

                var body = Encoding.UTF8.GetBytes(json);
                model.BasicPublish(exchange: "",
                                   routingKey: MensageriaServiceConsts._QUEUE_KEY,
                                   basicProperties: null,
                                   body: body);
            }
        }