示例#1
0
        public IEvent CreateEvent(string exchange)
        {
            IEvent ev;

            if (exchange == EventType.SendEmail.ToString())
            {
                ev = new SendEmailEvent();
            }

            else if (exchange == EventType.SendSms.ToString())
            {
                ev = new SendSmsEvent();
            }

            else
            {
                throw new EventNotSupportedException(exchange);
            }

            return(ev);
        }
        public async Task <string> SendMessage(MessageViewModel message)
        {
            var sendSmsEvent = new SendSmsEvent
            {
                Id      = message.Id,
                Body    = message.Body,
                From    = message.From,
                To      = message.To,
                Version = "v1.0"
            };

            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "sms", type: ExchangeType.Direct);

                    IBasicProperties props = channel.CreateBasicProperties();
                    props.CorrelationId = Guid.NewGuid().ToString();
                    props.ReplyTo       = "receive";

                    var    binaryFormatter = new CustomBinaryFormatter();
                    byte[] body            = binaryFormatter.ToByteArray(sendSmsEvent);

                    channel.BasicPublish(exchange: "sms",
                                         routingKey: "send",
                                         basicProperties: props,
                                         body: body);
                }

            return("Your message will be send soon");
        }