Example #1
0
        /// <summary>
        /// Enqueues a message
        /// </summary>
        /// <param name="message">The message to enqueue</param>
        /// <param name="principal">The sender principal</param>
        /// <returns>Returns a task that completes when the message has been enqueued</returns>
        public async Task Enqueue(Message message, IPrincipal principal)
        {
            CheckDisposed();
            var expires       = message.Headers.Expires;
            var securityToken = await _securityTokenService.NullSafeIssue(principal, expires);

            var persistedMessage = message.WithSecurityToken(securityToken);

            if (_messageEncryptionService != null)
            {
                persistedMessage = await _messageEncryptionService.Encrypt(persistedMessage);
            }

            using (var channel = _connection.CreateModel())
            {
                await RabbitMQHelper.PublishMessage(persistedMessage, principal, channel, null, _queueExchange, _encoding);

                await _diagnosticService.EmitAsync(
                    new RabbitMQEventBuilder(this, DiagnosticEventType.MessageEnqueued)
                {
                    Queue         = _queueName,
                    Message       = message,
                    ChannelNumber = channel.ChannelNumber
                }.Build());
            }
        }
        /// <inheritdoc />
        public async Task SendMessage(Message message, IEndpointCredentials credentials = null,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            CheckDisposed();

            var destination = message.Headers.Destination;
            var connection  = _connectionManager.GetConnection(destination);

            using (var channel = connection.CreateModel())
            {
                await RabbitMQHelper.PublishMessage(message, Thread.CurrentPrincipal, channel, InboxQueueName);

                if (_messageJournal != null)
                {
                    await _messageJournal.Append(message, MessageJournalCategory.Sent, cancellationToken);
                }

                await _diagnosticService.EmitAsync(
                    new RabbitMQEventBuilder(this, DiagnosticEventType.MessageDelivered)
                {
                    Message       = message,
                    ChannelNumber = channel.ChannelNumber,
                    Queue         = InboxQueueName
                }.Build(), cancellationToken);
            }
        }
        /// <inheritdoc />
        public async Task PublishMessage(Message message, TopicName topicName, CancellationToken cancellationToken)
        {
            CheckDisposed();
            var publisherTopicExchange = topicName.GetTopicExchangeName();
            var connection             = _connectionManager.GetConnection(_baseUri);

            using (var channel = connection.CreateModel())
            {
                await RabbitMQHelper.PublishMessage(message, Thread.CurrentPrincipal, channel, null, publisherTopicExchange);

                if (_messageJournal != null)
                {
                    await _messageJournal.Append(message, MessageJournalCategory.Published, cancellationToken);
                }

                await _diagnosticService.EmitAsync(
                    new RabbitMQEventBuilder(this, DiagnosticEventType.MessageDelivered)
                {
                    Message       = message,
                    ChannelNumber = channel.ChannelNumber,
                    Exchange      = publisherTopicExchange
                }.Build(), cancellationToken);
            }
        }