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