示例#1
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _configuration.ConfigureRabbit();

            // Create a channel for this reader
            _channel = _connection.CreateChannel();

            // Create a consumer for the queue. This is a method implemented by RabbitMQ.Client to easily subscribe to incoming messages on this queue
            var consumer = new EventingBasicConsumer(_channel);

            // Add an event handler for receiving messages on the queue
            consumer.Received += (evt, evt2) =>
            {
                if (HandleMessage(evt2))
                {
                    // Acknowledge this message as handled
                    _channel.BasicAck(evt2.DeliveryTag, false);
                }
                else
                {
                    // Reject the message and put it back on the queue for trying again.
                    _channel.BasicReject(evt2.DeliveryTag, true);
                }
            };

            // On the provided queue name, register our consumer as a consumer.
            _channel.BasicConsume(_queueName.Name, false, consumer);

            return(Task.CompletedTask);
        }
        public Task PublishMessageAsync <T>(string messageType, T value)
        {
            using var channel = _connection.CreateChannel();
            var message = channel.CreateBasicProperties();

            message.ContentType  = "application/json";
            message.DeliveryMode = 2;
            // Add a MessageType header, this part is crucial for our solution because it is our way of distinguishing messages
            message.Headers = new Dictionary <string, object> {
                ["MessageType"] = messageType
            };
            var body = JsonSerializer.SerializeToUtf8Bytes(value);

            // Publish this without a routing key to the rabbitmq broker
            channel.BasicPublish("TestApp", string.Empty, message, body);
            return(Task.CompletedTask);
        }
示例#3
0
        public void ConfigureRabbit()
        {
            if (!configured)
            {
                var channel = _connection.CreateChannel();

                channel.ExchangeDeclare("mealz", "fanout");

                channel.QueueDeclare("Authentication Service", false, false);
                channel.QueueDeclare("User Service", false, false);
                channel.QueueDeclare("Recipe Service", false, false);
                channel.QueueDeclare("Moderation Service", false, false);

                channel.QueueBind("Authentication Service", "mealz", "UserRegistered");
                channel.QueueBind("Authentication Service", "mealz", "UserChanged");
                channel.QueueBind("Authentication Service", "mealz", "UserDeleted");
                channel.QueueBind("Authentication Service", "mealz", "UserRoleUpdated");
                channel.QueueBind("Authentication Service", "mealz", "AdminAdded");

                channel.QueueBind("Recipe Service", "mealz", "RemoveRecipe");

                configured = true;
            }
        }
示例#4
0
        public void ConfigureRabbit()
        {
            if (_configured)
            {
                return;
            }

            var channel = _conn.CreateChannel();

            channel.ExchangeDeclare(Exchange, "fanout");

            channel.QueueDeclare("TweetService", false, false);
            channel.QueueDeclare("AuthenticationService", false, false);
            channel.QueueDeclare("UserService", false, false);
            channel.QueueDeclare("FileManagementService", false, false);
            channel.QueueDeclare("FollowService", false, false);
            channel.QueueDeclare("TimelineService", false, false);
            channel.QueueDeclare("ModerationService", false, false);
            channel.QueueDeclare("LikeService", false, false);
            channel.QueueDeclare("TrendingService", false, false);

            //QueueBind(Service to which the message will be send, Exchange, Message class names)
            channel.QueueBind("TweetService", Exchange, "NewProfileMessage");
            channel.QueueBind("AuthenticationService", Exchange, "NewUserMessage");

            channel.QueueBind("AuthenticationService", Exchange, "EmailChangedMessage");
            channel.QueueBind("TweetService", Exchange, "ProfileChangedMessage");

            channel.QueueBind("UserService", Exchange, "ProfileImageChangedMessage");
            channel.QueueBind("TweetService", Exchange, "ProfileImageChangedMessage");

            channel.QueueBind("UserService", Exchange, "AddFollowerMessage");
            channel.QueueBind("UserService", Exchange, "RemoveFollowerMessage");

            channel.QueueBind("TimelineService", Exchange, "NewPostedTweet");
            channel.QueueBind("TimelineService", Exchange, "NewProfileMessage");
            channel.QueueBind("TimelineService", Exchange, "AddFollowerMessage");
            channel.QueueBind("TimelineService", Exchange, "ProfileChangedMessage");
            channel.QueueBind("TimelineService", Exchange, "RemoveFollowerMessage");
            channel.QueueBind("TimelineService", Exchange, "ProfileImageChangedMessage");

            channel.QueueBind("ModerationService", Exchange, "NewProfanityTweet");
            channel.QueueBind("ModerationService", Exchange, "NewProfileMessage");
            channel.QueueBind("ModerationService", Exchange, "ProfileChangedMessage");
            channel.QueueBind("ModerationService", Exchange, "ProfileImageChangedMessage");

            channel.QueueBind("LikeService", Exchange, "ForgetUserMessage");
            channel.QueueBind("TweetService", Exchange, "ForgetUserMessage");
            channel.QueueBind("FollowService", Exchange, "ForgetUserMessage");
            channel.QueueBind("TimelineService", Exchange, "ForgetUserMessage");
            channel.QueueBind("ModerationService", Exchange, "ForgetUserMessage");
            channel.QueueBind("AuthenticationService", Exchange, "ForgetUserMessage");

            channel.QueueBind("LikeService", Exchange, "UnApproveTweetMessage");
            channel.QueueBind("TweetService", Exchange, "UnApproveTweetMessage");
            channel.QueueBind("TimelineService", Exchange, "UnApproveTweetMessage");

            channel.QueueBind("LikeService", Exchange, "DeleteTweetMessage");
            channel.QueueBind("TimelineService", Exchange, "DeleteTweetMessage");
            channel.QueueBind("ModerationService", Exchange, "DeleteTweetMessage");

            channel.QueueBind("TrendingService", Exchange, "NewTopicTweetMessage");

            channel.QueueBind("AuthenticationService", Exchange, "NewAdminMessage");
            channel.QueueBind("AuthenticationService", Exchange, "UpgradeUserToAdminMessage");

            _configured = true;
        }