Пример #1
0
        /// <summary>
        /// 发布消息
        /// </summary>
        /// <param name="topic">消息主题</param>
        /// <param name="message">消息体,注意所有发布的消息均须为EventMessage的子类,方便事件总线底层进行通讯处理。</param>
        /// <param name="priority">消息优先级</param>
        public void Publish(string topic, EventMessage message, MQPriority priority = MQPriority.Normal)
        {
            var publisher = GetTopic(topic);

            if (publisher == null)
            {
                return;
            }

            // 发送消息
            switch (message.Action)
            {
            // 发送短信
            case "SMS":
                SendSms(message, publisher);
                break;

            case "MAIL":
                SendMail(message, publisher);
                break;

            default:
                publisher.PublishMessage(message.ToJson());     // 默认情况下直接将消息发送出去
                break;
            }
        }
Пример #2
0
 /// <summary>
 /// 发送消息
 /// </summary>
 /// <param name="topic"></param>
 /// <param name="message"></param>
 /// <param name="priority"></param>
 public void Publish(string topic, EventMessage message, MQPriority priority = MQPriority.Normal)
 {
     try {
         bus.Publish(message,
                     conf => conf.WithPriority((Byte)priority)
                     .WithTopic(topic));
     }
     catch (Exception ex) {
         XTrace.WriteLine($"发送消息 {topic} - {message.ToJson()} 失败。");
         XTrace.WriteException(ex);
         throw ex;
     }
 }
Пример #3
0
        /// <summary>
        /// 发送指定主题的消息
        /// </summary>
        /// <param name="topic">The topic.</param>
        /// <param name="message">The MSG data.</param>
        /// <param name="priority">The priority.</param>
        /// <exception cref="System.Exception"></exception>
        public void Publish(string topic, EventMessage message, MQPriority priority = MQPriority.Normal)
        {
            var producer = GetProducer(topic);

            if (producer == null)
            {
                throw new Exception($"不存在主题为 {topic} 的消息发布者。");
            }

            try
            {
                ITextMessage msg = producer.CreateTextMessage();
                msg.Text = message.ToJson();
                foreach (var kv in message.Data)
                {
                    msg.Properties.SetString(kv.Key, kv.Value);
                }
                producer.Send(msg, MsgDeliveryMode.Persistent, (MsgPriority)priority, TimeSpan.MinValue); // 发送消息
                retryTimes = 0;                                                                           // 重置失败重试次数
            }
            catch (IOException ex) {
                XTrace.WriteLine($"发布消息 {topic} 失败,消息内容:{message.ToString()}。");
                XTrace.WriteException(ex);
                Thread.Sleep(1000 * 60); // 延迟1分钟后再试
                RetryPublish(topic, message, ex);
            }
            catch (ConnectionClosedException ex) {
                XTrace.WriteException(ex);
                Thread.Sleep(1000 * 10); // 延迟10秒钟再试
                RetryPublish(topic, message, ex);
            }
            catch (Exception ex) {
                XTrace.WriteException(ex);
                PushRepublishMessage(topic, message);
                producers.Remove(topic);
                throw ex;
            }
        }