Exemplo n.º 1
0
        public void Publish(Message message)
        {
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var policy = Policy.Handle <BrokerUnreachableException>()
                         .Or <SocketException>()
                         .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) =>
            {
                //todo : log
                // Console.WriteLine(ex.ToString());
            });

            using (var channel = _persistentConnection.CreateModel())
            {
                IModelExensions.ExchangeDeclare(channel, exchange: _brokerName, type: ExchangeType.Direct, durable: true);
                DefineCommandQueue();
                var body = message.ToMessage();
                policy.Execute(() =>
                {
                    channel.BasicPublish(exchange: _brokerName,
                                         routingKey: _routingKey,
                                         mandatory: false,
                                         basicProperties: null,
                                         body: body);
                });
            }
        }
Exemplo n.º 2
0
        private void DefineCommandQueue()
        {
            if (_isDefineQueue)
            {
                return;
            }
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }
            var channel = _persistentConnection.CreateModel();

            channel.QueueDeclare(_queueName, true, false, false, null);
            IModelExensions.QueueBind(channel, queue: _queueName, exchange: _brokerName, routingKey: _routingKey);
            _isDefineQueue = true;
        }