准备从以下几个方面简单的谈谈短彩信模块的实现:

[短彩信]C#短彩信模块开发设计(1)——架构(http://www.cnblogs.com/CopyPaster/archive/2012/12/07/2806776.html)
[短彩信]C#短彩信模块开发设计(2)——配置(http://www.cnblogs.com/CopyPaster/archive/2012/12/10/2811626.html)
[短彩信]C#短彩信模块开发设计(3)——协议(http://www.cnblogs.com/CopyPaster/archive/2012/12/12/2814918.html)
[短彩信]C#短彩信模块开发设计(4)——其他(http://www.cnblogs.com/CopyPaster/archive/2012/12/17/2821715.html)

现在来说说配置,其实短彩信服务,抛开协议和通讯方式的差异外,整个处理过程是相似的,或者说基本一样(当时在写彩信服务的时候一度想把二者通过接口抽象写到一个服务里去,不过从服务应职责单一原则和维护的角度来讲,最终还是分开为好)。所以,这里以我在一个项目中短信模块的配置来作为示例。本文的目的仅仅是希望大家通过配置的角度去看短彩信服务应该包括那些功能,另外一点就是跟前一次Blog去做一些具体的呼应。大家不用去一一关注我这里示范的所有配置(毕竟有些特定业务相关),可以根据自己实际情况参考和取舍,当然大家对于遗漏进行补充。

下面现先看看配置(为了不依赖数据库,索性全部基于xml,从多套服务共同部署运行的角度来讲,一些配置节点集合写入一个全局数据库其实更合理;至于程序中如何将xml和相应对象的互相转化,做法太多,第三方的、根据一定规则反射的……,这里不介绍了):

<SMSAConfig><SysConfigItem ServiceCode="CSMA" RemotingServerPort="8085" MachineID="1" ResendTimeout="30000" ResendCount="3" ActiveTestPeriod="20" DefaultIsmgID="CN.cq.1." MoToAmqThreadCount="3" MtRespToAmqThreadCount="3" MtReplyToAmqThreadCount="3" AmqRetrySecond="60" MobileSplitString="," ServiceIntervalSecond="45"/><AmqConnectionConfigItems><Item QueueServerCode="QueueServer1" UserID="u1" Password="w1" SleepSecond="10" ConnectionCount="5" BrokerUri="tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0&amp;maxInactivityDurationInitalDelay=30000&amp;connection.AsyncSend=false"/></AmqConnectionConfigItems><AmqQueueConfigItems><Item QueueType="ResultMediaTask" QueueName="result.mediatask"/><Item QueueType="ResultSendReport" QueueName="result.sendreport"/><Item QueueType="MoQueue" QueueName="mo.queue"/></AmqQueueConfigItems><ApplicationConfigItems><Item AppCode="MultiPush.1." AppQueueName="mt.multipush1" BeginReceiveTime="08" EndRecevieTime="22" /><Item AppCode="MultiPush.2." AppQueueName="mt.multipush2" BeginReceiveTime="08" EndRecevieTime="22" /><Item AppCode="MultiPush.3." AppQueueName="mt.multipush3" BeginReceiveTime="08" EndRecevieTime="22" /><Item AppCode="SendTask." AppQueueName="mt.sendtask" BeginReceiveTime="00" EndRecevieTime="24"/></ApplicationConfigItems><IsmgServerConfigItems><Item ID="CN.hn.1." IpAddress="127.0.0.1" Port="7890" SpCode="916086" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.js.1." IpAddress="127.0.0.1" Port="7890" SpCode="910680" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.hb.1." IpAddress="127.0.0.1" Port="7890" SpCode="917339" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.cq.1." IpAddress="127.0.0.1" Port="7890" SpCode="922198" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.sx.1." IpAddress="127.0.0.1" Port="7890" SpCode="926536" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.gd.1." IpAddress="127.0.0.1" Port="7890" SpCode="419901" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/><Item ID="CN.nm.1." IpAddress="127.0.0.1" Port="7890" SpCode="905331" SharedSecret="pw" MoConnectionCount="1" MtConnectionCount="1" CanWappush="False" ComputerWorker="1" MaxSendCount="20000" IntelligentSlowing="False"/></IsmgServerConfigItems><MachineConfigItems><Item MachineID="1" IP="127.0.0.1" Port="8085"/>       <Item MachineID="2" IP="192.168.1.10" Port="8085"/></MachineConfigItems><RegionIsmgMappingConfigItems><Item ID="1" RegionCode="CN.hn." IsmgID="CN.hn.1." /><Item ID="2" RegionCode="CN.js." IsmgID="CN.js.1." /><Item ID="3" RegionCode="CN.hb." IsmgID="CN.hb.1." /><Item ID="4" RegionCode="CN.cq." IsmgID="CN.cq.1." /><Item ID="5" RegionCode="CN.sx." IsmgID="CN.sx.1." /><Item ID="6" RegionCode="CN.gd." IsmgID="CN.gd.1." /><Item ID="7" RegionCode="CN.nm." IsmgID="CN.nm.1." /></RegionIsmgMappingConfigItems><RegionConfigItems><Item RegionID="594463261" RegionCode="CN.hn." /><Item RegionID="594463294" RegionCode="CN.js." /><Item RegionID="594463243" RegionCode="CN.hb." /><Item RegionID="1168" RegionCode="CN.cq." /><Item RegionID="1177" RegionCode="CN.sx." /><Item RegionID="86564469" RegionCode="CN.gd." /><Item RegionID="1172" RegionCode="CN.nm." /></RegionConfigItems></SMSAConfig>

SysConfigItem

ServiceCode:服务代码,日志分类、监控信息等需要用到;
RemotingServerPort:Remoting监听端口;《[短彩信]C#短彩信模块开发设计(1)——架构》里说过,如果分省接入,然后配置又不是每套服务都能处理所有网关,就需要消息跨机跳转;这里用的的.net remoting,当然了比较老气,改为RPC的方式更好;
MachineID:当前服务部署机器的ID,在跨机的时候也需要用到;
ResendTimeout:超时重发时间;
ResendCount:最大重发次数;
ActiveTestPeriod:与网关的心跳间隔(单位:秒)
DefaultIsmgID:默认网关ID;如果分省接入的时候,如果某个消息对应不到网关,则发给某认网关,一般配置为一级网关;
MoToAmqThreadCount:上行写入Amq队列线程数;《[短彩信]C#短彩信模块开发设计(1)——架构》里说过Amq的收发原则;
MtRespToAmqThreadCount:下行写入Amq队列线程数;
MtReplyToAmqThreadCount:状态报告写入Amq队列线程数;
AmqRetrySecond:Amq失败重连间隔(当某个连接坏了的时候,自动重连时间间隔)
MobileSplitString:短信群发,手机号分隔符号(实际从cmpp2.1之后兼容了短信群发,协议中接收手机号码是支持数组的,不过我们在项目中没有使用,即使上层应用传过来的群发手机号,实际的处理也是split成了N条消息给网关的);
ServiceIntervalSecond:服务定时间隔(主要是配合监控系统使用,一到这个配置时间,服务会给监控服务发送心跳);

AmqConnectionConfigItems (Amq连接配置)

主要来配置Amq队列的连接信息,从上面大家应该能看出:
1)我们使用了需要用户名/密码的方式去连接;
2)采用同步方式收发消息;
SleepSecond:如果队列消息收空了,休眠时间;

AmqQueueConfigItems(Amq队列配置集)

代码中定义了一个QueueType的枚举,根据此枚举确定将回执/状态报告/上行发送到Amq的哪个队列之中;
QueueType:队列类型;
QueueName:Amq队列名称;

ApplicationConfigItems(下行应用配置集)

业务中需要将某些消息在某些时间段内不发送,AmqLisenter如果发现某个队列的配置不在规定时间之前,则停止接收消息,通过这样的方式控制,不向网关发送消息;
AppCode:应用名称;
AppQueueName:应用Amq队列名称;
BeginReceiveTime:开始接受时间;
EndRecevieTime:结束接收时间;

IsmgServerConfigItems(网关配置集)

ID:网关ID(本地MSMQ队列会根据此命名和自动创建)
IpAddress:网关IP;
Port:网关端口;
SpCode:连接鉴权用户名(网关用SpCode来区分接入的Sp,一般在连接鉴权时的用户名字/密码,用户名都用spcode,所以配置名称干脆做成了SpCode);
SharedSecret:连接鉴权密码;
MoConnectionCount:上行连接数;
MtConnectionCount:下行连接数;
CanWappush:是否支持Wappush;(wappush实际就是一种特殊短信)
ComputerWorker:这里其实就是配置是否所有服务能跑所有网关了;逗号切分;
MaxSendCount:单连接的最大发送速度;
IntelligentSlowing:是否智能降速(如果配置为true,则不根据MaxSendCount进行流控;);

备注:

1)之所以要流控,就是因为如果发送过快,会把网关“压跨”,往往的结果就是网关表现越差,发送约慢,而且这个慢一般非线性,是种激增;但是有时候高于网关给的流控阀值,网关也没有表现出差,所以如何充分利用网关性能提高发送速度呢?智能降速就是一种方法。所谓智能降速就是,只要网关表现好,我就发;一旦网关表现不好(其实就是看下行延迟),我就降低速度;关于流控和智能降速,打算在第4次来说([短彩信]C#短彩信模块开发设计(4)——其他);之前大家很关心的如何提高短彩信发送速度,这就是一种优化方案。

2)如果分省接的话,可能会遇到有些省同一个端口不同时支持上行和下行(现在华为,东软,亚信,深讯啥的都做个一些省的网关;像深讯就是这样用端口区分上下行);所以在配置网关的时候,有些省可能需要配置2条信息;处理上行的把MtConnectionCount配成0(一般是7910) ,只处理下行的把MoConnectionCount配成0就可以了(一般是7890)。ID可以配置成CN.xx.1.\CN.xx.2.

MachineConfigItems

就是配置机器ID、IP、端口了没啥好说(跨机的时候需要使用此配置)

RegionIsmgMappingConfigItems/RegionConfigItems

这两个配置集,主要是我们项目中,上层应用传过来的省代码是数字(RegionID),短信服务需要配置本地MSMQ使用,程序会自动创建和使用各个队列,那么用数字显然可读性不高,所以用RegionCode比较直观(RegionCode也是本地MSMQ队列名称的一部分);RegionIsmgMappingConfigItems则是把省和网关对应起来;

转载于:https://www.cnblogs.com/CopyPaster/archive/2012/12/10/2811626.html

[短彩信]C#短彩信模块开发设计(2)——配置相关推荐

  1. [短彩信]C#短彩信模块开发设计(1)——架构

    准备从以下几个方面简单的谈谈短彩信模块的实现: [短彩信]C#短彩信模块开发设计(1)--架构(http://www.cnblogs.com/CopyPaster/archive/2012/12/07 ...

  2. 30Kw 充电桩电源模块开发设计--未完待续

    系列文章目录 30Kw AC-DC充电桩模块开发设计 研发过程 系列文章目录 30Kw AC-DC充电桩模块开发设计 研发背景 30Kw AC-DC充电桩模块是采用专利电路设计和创新工艺的直流充电模块 ...

  3. 双目立体视觉摄像头模块开发搭建,含源代码、电路图

    作品摘要 本作品为基于ATLYS FPGA开发平台.VmodCAM双目摄像头模块开发设计的双目立体视觉系统.VmodCAM用于采集双路的视觉信息,FPGA开发平台负责完成视觉信息的处理及图像的高速分析 ...

  4. [高通SDM450][Android9.0]CTA认证--去掉彩信、短信、通话功能

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 与去掉录音功能同理,设备在进行入网认证 ...

  5. iPhone秘籍-彩信,短信转发,软件推荐

    iPhone用了很久,系统还是1.1.2的,周末有时间升级到了2.0.x的系统.以前对iPhone的"弊病"不能收发彩信,短信不能转发一直是忍了又忍,终于忍不下去在网上找到了相应的 ...

  6. Android9.0 短信发送和彩信接受流程

    文章目录 一.短信发送流程 二.彩信接受流程 三.接收彩信的解析 一.短信发送流程 在短信发送界面点击发送按钮后(ComposeMessageActivity响应OnClick),ComposeMes ...

  7. 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战

    商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 文章目录 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 第八章 账号微服务注册模块+短信验 ...

  8. android 读取短信 彩信,Android 短信转换成彩信的消息数量(实例代码)

    默认3条以上转为彩信 改为5条 路径vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/MmsConfig.java p ...

  9. 电信增值业务彩信管理平台软件模块清单

    电信增值业务彩信管理平台软件模块清单 彩信平台软件报价清单 产品名称 模块 模块功能描述 标准版 专家版 彩信网关部分 协议处理模块 支持MM7(中国移动彩信网关.中国联通彩信网关)协议,华为彩信中心 ...

最新文章

  1. objective-c系列-单例
  2. ssl证书是由什么组成?ssl证书是什么?
  3. 世界级安全技术专家力作——《Linux防火墙》
  4. VTK:模型之ExtractLargestIsosurface
  5. 如何消耗更少资源?Unity优化技巧(上)
  6. ARM指令寻址方式之: 数据处理指令的寻址方式
  7. ios15使用纯代码计算cell的高度
  8. Git cherry-pick后再merge出现一个“奇怪”的现象
  9. san分布式共享文件系统_SAN网络存储共享软件全攻略剖析
  10. Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数
  11. “云原生”为何而生?
  12. MySQL Control Flow Functions(控制流)
  13. 基础训练 龟兔赛跑预测
  14. java的if判读_java if判断
  15. 从零基础入门Tensorflow2.0 ----五、25TF1.0自定义estimator
  16. 小米12s 12sU 12sP 12x 12pro天玑版等小米机型通用解锁bl 刷写root全部步骤教程
  17. 互联网日报 | 虎牙与斗鱼官宣合并;国内第四大运营商中国广电成立;拍拍贷完成存量业务清退...
  18. workman 搭建tcp服务器,和websocket互相通信
  19. windows11安装微软商店的ubuntu报错,已解决
  20. 无敌python爬虫教程学习笔记(二)

热门文章

  1. 纯API函数实现串口读写。
  2. 阿里巴巴开源 Sentinel,进一步完善 Dubbo 生态
  3. linux 查看用户上次修改密码的日期
  4. Java中接口、抽象类与内部类学习
  5. Windows Server 2003 R2与SP2 的区别
  6. xgboost keras_用catboost lgbm xgboost和keras预测财务交易
  7. java职业技能了解精通_如何通过精通数字分析来提升职业生涯的发展,第8部分...
  8. tableau 自定义省份_在Tableau中使用自定义图像映射
  9. 标准化(Normalization)和归一化实现
  10. 1137. 第 N 个泰波那契数