你的位置:首页 > 软件开发 > ASP.net > .net 业务消息队列

.net 业务消息队列

发布时间:2015-11-03 11:00:29
开源QQ群: .net 开源基础服务 238543768开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ## 业务消息队列 ##业务消息队列是应用于业务的解耦和分离,应具备分布式,高可靠性,高性能,高实时性,高稳定 ...

.net 业务消息队列

开源QQ群: .net 开源基础服务  238543768

开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ

## 业务消息队列 #### 优点: #### 缺点: #### 缺点原因: #### 缺点解决方案: #### 问答: ##### *2.无单点故障及故障监控,异常提醒?* ###### *3.生产者端负载均衡,故障转移,故障自动恢复,并行消息插入?* ###### *4.消费者端负载均衡,故障保持,故障自动恢复,并行消息消费。* ###### *5.消息高可靠性持久化,较高性能,较高实时性,高稳定性,高稳定性。* ###### *6.支持9999个消息分区,单个消息分区单天支持近1亿的消息存储。* ###### *7.消费者拉方式获取消息,在高并发,大量消息涌入的情况下,只要消费能力足够,不会有消息延迟,消息越多性能越好。* ##### 未来改进: ##

 /// <summary>    /// 发送消息    /// </summary>    /// <param name="msg"></param>    public void SendMessageDemo(get='_blank'>string msg)    {      //发送字符串示例      var p = ProducterPoolHelper.GetPool(new BusinessMQConfig() {           ManageConnectString = "server=192.168.17.201;Initial           Catalog=dyd_bs_MQ_manage;User ID=sa;Password=Xx~!@#;" },//管理中心数据库          "dyd.mytest3");//队列路径 .分隔,类似类的namespace,是队列的唯一标识,要提前告知运维在消息中心注册,方可使用。      p.SendMessage(@"1");      //发送对象示例      /* var obj = new message2 { text = "文字", num = 1 };       var p = ProducterPoolHelper.GetPool(new BusinessMQConfig() {             ManageConnectString = "server=192.168.17.237;Initial             Catalog=dyd_bs_MQ_manage;User ID=sa;Password=Xx~!@#;" },//管理中心数据库            "test.diayadian.obj");//队列路径 .分隔,类似类的namespace,是队列的唯一标识,要提前告知运维在消息中心注册,方可使用。      p.SendMessage<message>(obj);      */    }    private ConsumerProvider Consumer;    /// <summary>    /// 接收消息    /// </summary>    /// <param name="action"></param>    public void ReceiveMessageDemo(Action<string> action)    {      if (Consumer == null)      {        Consumer = new ConsumerProvider();        Consumer.Client = "dyd.mytest3.customer1";//clientid,接收消息的(消费者)唯一标示,一旦注册以后,不能更改,业务下线废弃后必须要告知运维,删除消费者注册。        Consumer.ClientName = "客户端名称";//这个相对随意些,主要是用来自己识别的,要简短        Consumer.Config = new BusinessMQConfig() { ManageConnectString =             "server=192.168.17.201;Initial Catalog=dyd_bs_MQ_manage;User             ID=sa;Password=Xx~!@#;" };        Consumer.MaxReceiveMQThread = 1;//并行处理的线程数,一般为1足够,若消息处理慢,又想并行消费,则考虑 正在使用的分区=并行处理线程数 为并行效率极端最优,但cpu消耗应该不小。        Consumer.MQPath = "dyd.mytest3";//接收的队列要正确        Consumer.PartitionIndexs = new List<int>() { 1, 2, 3,4, 5, 6, 7, 8 };//消费者订阅的分区顺序号,从1开始        Consumer.RegisterReceiveMQListener<string>((r) =>        {          /*            * 这些编写业务代码            * 编写的时候要注意考虑,业务处理失败的情况。            * 1.重试失败n次。            * 2.重试还不行,则标记消息已被处理。然后跳过该消息处理,自己另外文档记录这种情况。            * 消息被消费完毕,一定要调用MarkFinished,标记消息被消费完毕。            */          action.Invoke(r.ObjMsg);          r.MarkFinished();        });      }    }    /// <summary>    /// 关闭消息订阅连接    /// </summary>    public void CloseReceiveMessage()    {      //注册消费者消息,消费者务必要在程序关闭后关掉(dispose)。否则导致异常终止,要人工等待连接超时后,方可重新注册。      if (Consumer != null)      {        Consumer.Dispose();        Consumer = null;      }    }  } 

原标题:.net 业务消息队列

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。