﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-socketref,再见！高德-随笔分类-qpid</title><link>http://www.cppblog.com/socketref/category/19959.html</link><description>gis,mouse,luolasi</description><language>zh-cn</language><lastBuildDate>Thu, 22 Nov 2012 07:28:36 GMT</lastBuildDate><pubDate>Thu, 22 Nov 2012 07:28:36 GMT</pubDate><ttl>60</ttl><item><title>Rpc+Mq实现分布式系统</title><link>http://www.cppblog.com/socketref/archive/2012/11/22/195531.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 22 Nov 2012 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2012/11/22/195531.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/195531.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2012/11/22/195531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/195531.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/195531.html</trackback:ping><description><![CDATA[聊聊草草<br />实现一套通信框架 <br />A - 移动终端； B - 接入服务器(网关) , C,D,E - 内部服务系统 ， M -内部服务系统的消息队列 <br />B 用于接入成千上万的A，B不具备业务能力，只有CDE才能与A进行业务交互，M充当消息管道。<br />一般的做法，各个系统模块指定标准协议，可以是xml或者二进制的，然后各开发各的，socket或者http等部件，开发语言也是cpp，python，java齐上阵。<br />这种开发模式过于繁琐，模块之间的耦合比较紧密，应该把应用和通信细节剥离出来。<br />我的做法是所有有系统对象之间的消息传递都是基于Rpc接口级的调用，更本不设计通信、协议编码，只要根据IDL就可以，A请求C的服务，那A只需要调用C的接口函数即可，底部的工作：<br />A到B的socket通信，B将A的消息转换到M，M再传输到C，这些工作都可以透过Rpc层完成透明，反过来C的调用请求也安原路返回到A。<br />C要发送消息到A，那调用A的接口，rpc层自动将请求转化未MQ协议，被路由到B，B找到A的链接，并将Mq消息转化未socket消息传递到A，A端接收消息转换成Rpc函数回调到A的应用代码。<br /><br />除了简单的调用、返回方式还有<br />单项调用请求、异步调用请求、消息广播请求<br /><br />B端可以通过外部配置使得A的请求路由到C，或者D，或者全部接收，取决与应用需求(应用还是集群)<br />MQ如果系统总线一般，将各个服务子系统链接成网络，是构成整个系统的基础。Rpc可以解脱程序员，让其将经历花在具体业务上，而且基本只要编写若干的服务接口函数即可。<br /><br />当然要实现以上功能特点，很多可用的框架，CORBA，DCOM，ICE等等，但这些过于庞大，对环境要求也有限制，如果要更高效、灵活的运用和包装需要大量修改其底层代码，与第三方的整合只能工作在他们的上层接口上，这个令人很沮丧，会导致产生更多的依赖和复杂的编程技巧。<br />这些全都丢弃，还是自己的rpc<img src ="http://www.cppblog.com/socketref/aggbug/195531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2012-11-22 10:50 <a href="http://www.cppblog.com/socketref/archive/2012/11/22/195531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>