当前位置: 首页 > news >正文

php网站开发流程步骤公积金门户网站建设方案

php网站开发流程步骤,公积金门户网站建设方案,建站多少钱一个,桂林行业网站最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的#xff0c;消息中间件是采用rabbitmq#xff0c;为了保证消息的绝对无丢失#xff0c;我们需要在发送和接受前对消息进行DB落地。在发送前我会先进行DB的插入#xff0c;单表插入#xff0c;所以在性… 最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的消息中间件是采用rabbitmq为了保证消息的绝对无丢失我们需要在发送和接受前对消息进行DB落地。在发送前我会先进行DB的插入单表插入所以在性能上也是能接受的单表插入做了压测基本上是一到两毫秒的时间加上消息的发送有ACK再加上集群是两个节点的高可用一个磁盘持久化节点单台TPS基本上是在2000-3000左右。这对于我们的业务场景来说是够用了。一旦当消息丢失或者由于网络问题、集群问题业务不会中断消息就算发不出去也没关系我们会进行消息的补偿或者同步api调用补偿。这是架构设计的必须要考虑的A计划、B计划、C计划这是敬畏或者危机意识。 你可能又要说两个节点或者三个节点的集群怎么会有问题那你就错了大错特错。只能说明你并不了解什么叫分布式系统及分布式系统的特性。你也许不会知道网络抖动、网络闪断导致socket断开如何进行心跳重试已保持有效的Rabbitmq Connection。当你的网络极不稳定你的linux keepalived VIP 来回漂移导致你的ARP根本无法成效可能就连广播都传不出去而客户端则在一直使用一个无用的IP地址。当你的集群节点之间无法连接成一个整体的时候各种奇葩的问题又来了。这些都是可能导致你的集群出问题的原因所以不要大意。 后面我会整理一篇专门讲解“rabbitmq高可用、故障转移集群架构“文章所以这里我们就不继续介绍了 这是一个铺垫本文的重点是介绍下我在尝试使用可视化webapi的输出模式这比原本json的输出模式看起来会方便许多。如果你的api提供两种输出模式人性化绝对很好。现在很多后端api都是没有界面的都是只提供了一个json输出。然而我们其实很需要一个可读性很强的输出模式。 我在开发消息补偿程序的时候我借鉴了这一思想进行了尝试。先来看下整体架构蓝图 本篇文章要介绍的是有关于这个补偿程序的api的可视化输出内容。不涉及到消息相关太多的东西只是为了让这个可视化输出看起来容易理解点。这个补偿程序需要对发送的消息和接受的消息进行查询和比较然后输出用来确定消息的发送是失败了还是成功的。简单逻辑就是比较某个时间段内的消息发送表和接受表然后进行消息id的匹配。 我在想这个数据反馈到api上是个什么样子的按照常规设计就是两个字段 /// summary /// 接受的消息对象。 /// /summary public  class  ReceiveMessage {      /// summary      /// 发送消息ID。      /// /summary      public  string  SendMessageId {  get ;  set ; }      /// summary      /// 接受消息ID。      /// /summary      public  string  ReceiveMessageId {  get ;  set ; } } 这表示一个消息从发送到接受的一个过程。如果失败了可能是只有SendMessageId而没有ReceiveMessageId。然后我才会针对没有ReceiveMessageId的消息进行自动补偿。在开发的时候只有几十条消息输出到postman中的看起来也还行但是不直观。 GetReceiveMessage是获取接受消息列表就是查看当前消息发送到接受是个什么状态。 /// summary /// 处理成功消息对象。 /// /summary public  class  SuccessMessage {      /// summary      /// 发送消息ID      /// /summary      public  string  SendMessageId {  get ;  set ; }      /// summary      /// 接受消息ID      /// /summary      public  string  ReceiveMessageId {  get ;  set ; }      /// summary      /// 处理成功消息ID      /// /summary      public  string  SuccessMessageId {  get ;  set ; } } SuccessMessage表示处理成功消息情况。此时有可能是有SendMessageIdReceiveMessageId消息但是SuccessMessageId可能是没有的。就会针对处理成功的消息进行发送。 突然受到ElasticSearch的_cat endpoint 启发。似乎这里我可以尝试下webapi带有两种输出模式一种是针对程序使用的json输出模式另外一种是针对人可以阅读的模式text/plain模式而第二种模式可以简单的理解为是行列转换缺省模式。 是不是看起来会很舒服。这在进行消息的时间段查看非常有帮助如果还按照原本的json输出模式可能看起来会比较吃力。 来看下基本的api的设计为了保证你的所有api支持?v可视化模式需要一定的抽象 需要定义一种ViewModel所有的数据都输出这种对象当然我这里也只是简单地封装。如果可以其实可以专门提取出一个库出来包括对文本的输出自动化。 我们看下BaseApiController: public  class  BaseApiController : ApiController     {         public  class  ViewModel         {             public  string  Content {  get ;  set ; }             public  object  JsonObject {  get ;  set ; }             public  bool  Success   true ;         }         protected  bool  IsView;         private  const  string  ViewQuerystring   ?v ;         public  ViewModel ResultModel;         private  const  string  CheckToken   CheckToken ;         private  const  string  Token   49BBD022-CDBF-4F94-80E4-5BCACB1192EC ;         private  bool  _checkStatus;         public  override  TaskHttpResponseMessage ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)         {             //验证token             if  (controllerContext.Request.Headers !  null  controllerContext.Request.Headers.Contains(CheckToken))             {                 var  requestToken controllerContext.Request.Headers.GetValues(CheckToken).FirstOrDefault();                 if  (requestToken !  null  requestToken.Equals(Token))                 {                     this ._checkStatus   true ;                 }             }             if  (!_checkStatus)             {                 var  checkResult   new  TaskHttpResponseMessage(()   new  HttpResponseMessage                 {                     Content   new  StringContent( 非法访问缺少token , Encoding.UTF8,  text/plain )                 }, cancellationToken);                 checkResult.Start();                 return  checkResult;             }             if  (controllerContext.Request.RequestUri.Query.Equals(ViewQuerystring))                 this .IsView   true ;             base .ExecuteAsync(controllerContext, cancellationToken);             //text模式             if  ( this .IsView)             {                 var  textResult   new  TaskHttpResponseMessage(()   new  HttpResponseMessage                 {                     Content   new  StringContent( this .ResultModel.Content, Encoding.UTF8,  text/plain )                 }, cancellationToken);                 textResult.Start();                 return  textResult;             }             //json模式             var  resultData   new  Result object             {                 Data   this .ResultModel.JsonObject,                 Type   this .ResultModel.Success ? ResultType.Successfully : ResultType.Failure             };             var  jsonResult   new  TaskHttpResponseMessage(()   new  HttpResponseMessage             {                 Content   new  ObjectContent( typeof (Result), resultData,  new  JsonMediaTypeFormatter(),  application/json )             }, cancellationToken);             jsonResult.Start();             return  jsonResult;         }     }    代码很简单这里给我们一个启发webapi是不是真的缺少了一个可视化模式 原文地址http://www.cnblogs.com/wangiqngpei557/p/6107150.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.sadfv.cn/news/210411/

相关文章:

  • 手机网站设计软件网站建设+设计那种连接线厂家
  • 深圳做外贸网站公司建e网室内设计网官网榻榻米衣柜官方
  • 东莞手机网站模板网站没有做适配 怎么办
  • 做企业网站备案都需要什么资料wordpress个人工作室主题
  • 学校网站建设的目的马格南摄影网站
  • 宝塔怎么做两个网站的解析公众号开发价格多少
  • 教育视频网站开发wordpress 任务
  • 国外做外汇网站交流淄博找能做网站的公司
  • 吴江网站建设哪家好360建筑网 官方网站
  • 做网站业务好干吗国外视觉差网站
  • 在家建设一个网站需要什么手续网站后面的官网是如何做的
  • 咖啡网站建设策划书做网站后台维护的岗位叫什么
  • 自己如何在网上做网站济南网站优化公司排名
  • 正邦做网站吗如何做网站聚合页
  • 网页制作教程教案seo搜索引擎优化就业前景
  • 文明网站机制建设深圳网站建设服务哪家专业
  • 做网站登录页面的论文息烽县住房和城乡建设局网站
  • 保定关键词排名首页aso应用优化
  • 石家庄网站设计公司排名沈阳专业网站制作设计
  • 北京住房城乡建设部网站首页怎么做网络推广优化
  • 网站建设设计服务公司什么网站可以做相册
  • 网站建设与管理专业教学计划网站建设软件开发公司
  • 网站建设步骤详解公众号和网站
  • 网站建设公司的公司响应式网站demo
  • 南昌电商网站设计readme.md做网站
  • 服装网站建设比较好做mip网站需要多钱
  • 网站开发实训报告模板台州关键词首页优化
  • 检查网站是否做301wordpress主题 水墨
  • 大连网站建设选高合科技深圳有哪些网络公司
  • 奇趣网做网站中国菲律宾南海开战