Esempio n. 1
0
        public mq_published GenerateMsgEntity(IPublishQueueConfig publishQueueConfig, object message, string queryurl = null, string callbakcurl = null)
        {
            var config = publishQueueConfig as RabbitPublishQueueConfig;

            config.CheckObjectNull(nameof(config));

            var publishentity = new mq_published();

            publishentity.service_name  = options.ServiceName;
            publishentity.exchange_name = config.ExchangeName;
            publishentity.route_key     = config.RouteKey;
            publishentity.queue_name    = config.QueueName;
            if (string.IsNullOrEmpty(publishentity.exchange_name))
            {
                publishentity.exchange_name = mqoptions.DeafaultExchangeName;
            }
            if (string.IsNullOrEmpty(publishentity.route_key))
            {
                publishentity.route_key = mqoptions.DeafaultRouteKey;
            }
            if (string.IsNullOrEmpty(publishentity.queue_name))
            {
                publishentity.queue_name = mqoptions.DeafaultQueueName;
            }
            publishentity.message   = (new Message {
                MsgBody = message, CallbackUrl = callbakcurl, SourceMsgId = publishentity.id, QueueName = publishentity.queue_name
            }).ToString();
            publishentity.query_url = queryurl;
            if (config.Args != null)
            {
                publishentity.remark = JsonConvert.SerializeObject(config.Args);
            }
            return(publishentity);
        }
Esempio n. 2
0
        public mq_published AddMsgToDb(
            object message,
            IPublishQueueConfig mQConfig,
            string queryurl    = null,
            string callbakcurl = null
            )
        {
            //message.CheckObjectNull(nameof(message));
            if (string.IsNullOrEmpty(queryurl))
            {
                queryurl = options.DeafaultQueryUrl;
            }
            if (string.IsNullOrEmpty(callbakcurl))
            {
                callbakcurl = options.DeafaultCallbackUrl;
            }
            //生成发布的消息实体
            var publishentity = mQGenerateMsgBody.GenerateMsgEntity(mQConfig, message, queryurl, callbakcurl);

            repository.UpdateSuccessStatus(publishentity, options.ExpiresMinute);
            //写入
            var dbContext = serviceProvider.GetService(mySqlEFOptions.MQDbContext) as DbContext;

            dbContext.Add(publishentity);

            return(publishentity);
        }
Esempio n. 3
0
 public MQResult DirectPublish(IPublishQueueConfig mqconfig, Message message)
 {
     try
     {
         var config = mqconfig as RabbitPublishQueueConfig;
         message.MsgSeq = 1;
         using (var channel = mqConnection.CreateModel())
         {
             channel.ConfirmSelect();
             channel.QueueDeclare(queue: config.QueueName, durable: true, exclusive: false, autoDelete: false, arguments: config.Args);
             channel.ExchangeDeclare(config.ExchangeName, ExchangeType.Direct);
             channel.QueueBind(config.QueueName, config.ExchangeName, config.RouteKey, null);
             var properties = channel.CreateBasicProperties();
             properties.Persistent = true;
             channel.BasicPublish(exchange: config.ExchangeName, routingKey: config.RouteKey, basicProperties: properties, body: message.ToBytes());
             if (!channel.WaitForConfirms(new TimeSpan(0, 0, 5)))
             {
                 return(new MQResult()
                 {
                     IsSucess = false, ExceptionMsg = "sent message failed"
                 });
             }
             Console.WriteLine($"[P] sent_message,queue={config.QueueName},msg={message.ToString()}");
             return(new MQResult()
             {
                 IsSucess = true, ChannelNumber = channel.ChannelNumber
             });
         }
     }
     catch (Exception ex)
     {
         //记log
         return(new MQResult()
         {
             IsSucess = false, ExceptionMsg = ex.Message
         });
     }
 }