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); }); } }
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; }