开源QQ群: .net 开源基础服务 238543768开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ## 业务消息队列 ##业务消息队列是应用于业务的解耦和分离,应具备分布式,高可靠性,高性能,高实时性,高稳定 ...
开源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
(#换成@)。