穿越火线电信宽带总线坏了区的总线在哪里?

中国电信集团智能网管服务总线接入规范;中国电信集团智能网管服务总线;接入规范;V1.0;中国电信集团公司2015年10月;中国电信集团公司--智能网管第1页,共29页;中国电信集团智能网管服务总线接入规范;修改记录;版本号V1.0时间记录人新建;中国电信集团公司--智能网管第2页,共29页;中国电信集团智能网管服务总线接入规范;1.文档说
中国电信集团智能网管服务总线接入规范
中国电信集团智能网管服务总线 接入规范
中国电信集团公司 2015年10月
中国电信集团公司--智能网管第1页,共29页
中国电信集团智能网管服务总线接入规范
修改记录 版本号 V1.0
变更原因 变更描述 新建初稿版本
中国电信集团公司--智能网管第2页,共29页
中国电信集团智能网管服务总线接入规范 1. 文档说明 1.1 编制说明 本规范作为电信集团各网管域系统和集团与省份两级服务总线互联接口协议的重要组成部分,为支撑电信集团各网管域系统之间的服务交互、以及集团服务总线和省份服务总线两级服务交互,同时为中国电信集团智能网管平台建设提供指导和依据。 1.2
适用范围 本规范适用于中国电信集团公司智能网管平台和其它网管域系统间的服务交互,同时也适用于电信集团和省份的智能网管服务总线平台之间的服务交互。 1.3
参考规范 《中国电信智能网管技术规范-技术架构分册V1.0》。 1.4 起草单位 本规范起草单位为中国电信集团公司。 1.5 解释权 本规范的解释权归中国电信集团公司所有。 1.6 版权 本规范的版权归中国电信集团公司所有。 2. 综述 2.1 概述 本规范明确了电信集团智能网管服务总线平台在接入业务系统时的服务接入原则,进行了跨系统的业务流程分析,确定了集团智能网管服务总线平台的接入服务的类别划分及各类服务的适用场景。在此基础上,对每类服务的交互过程、交互过程中的每个接口的接口协议进行了详细的阐述,并针对主要的服务类型编写了场景 Demo 供开发人员参考。针对服务交互过程的可靠性以及事后审计,规范也对其中各业务系统需要注意和配合的部分进行了详细描述。 2.2 目标 本规范为了指导中国电信集团公司以及下属省分公司进行各业务系统与集团智能网管服务总线平台的对接,实现以下目标: ? 当各业务系统间在建设及开发新的业务接口时,为相应业务系统间接口实现的中国电信集团公司--智能网管第3页,共29页
中国电信集团智能网管服务总线接入规范 技术统一化和规范化提供参考依据。 ? 当业务系统提供的接口服务接入到集团智能网管服务总线平台时,为该业务系统所属的服务的升级改造提供参考依据。 ? 当业务系统调用集团智能网管服务总线平台提供的服务能力时,为该业务系统的升级改造提供参考依据。 ? 为各业务系统的以保证服务交易可靠性为目标的升级改造提供参考依据。 2.3 范围 本规范主要包含以下几方面的内容: ? 明确了集团智能网管服务总线平台在接入业务系统服务时的接入原则。 ? 明确了集团智能网管服务总线平台接入服务的类别划分以及服务的适用场景。 ? 对每类服务的接口交互、接口交互中的每个接口的接口协议进行了详细的阐述。 ? 针对主要的服务类型编写了场景 Demo 供开发人员参考。 ? 针对服务交互过程的可靠性以及事后审计,规范也对其中各业务系统需要注意和配合的部分进行了详细描述。 3. 服务接入原则 由于各系统间差异较大且数量众多,为确保新疆网管ESB平台接口服务接入的稳定高效的实施,按照中国电信智能网管技术规范中的要求,建议若干服务接入原则如下: 3.1 服务能力定义要求 电信集团智能网管服务总线平台服务能力定义要求如下: 一个服务只能最多实现一个业务,如果一个服务完成两个事情 A 和 B,且要求 B 在服务升级的过程中不中断 A 的服务,则 A 和 B 应当分散在两个独立的服务中。 小数据量服务所传递的单条消息大小原则上不大于 128K,否则应建议采用大数据量服务方式。 3.2 接口技术统一原则 所有接入到电信集团智能网管服务总线平台的原子服务能力接口均采用基于HTTP协议的Webserivce技术以及REST风格的原子服务能力接口。 其中基于HTTP协议的WebService技术包括采用HTTP/SOAP协议的WebService、和采用REST风格的WebService两种形式。 3.3 数据格式统一原则 所有接入到电信集团智能网管服务总线平台的服务的接口数据包含公共框架层和业务框架层两部分,接口数据采用XML格式或者JSON格式,大数据量的接口数据可以辅以文本文件格式,文本内容也应采用XML格式或者JSON格式。 3.4 调用控制原则 中国电信集团公司--智能网管第4页,共29页
中国电信集团智能网管服务总线接入规范 ? 鉴权原则:对于注册发布到集团智能网管服务总线平台的服务,服务消费者只有经平台鉴权通过并授予访问权限后才能调用服务。 ? 频度控制原则:智能网管服务总线平台对服务调用的频度做相应的检查控制,如果在单位时间内的调用次数超过上限值将返回给服务消费者异常信息,通知已超过调用频度上限。 ? 流量控制原则:智能网管服务总线平台对服务调用的流量做相应的检查控制,如果在单位时间内的总流量超过上限值将返回给服务消费者异常信息,通知已超过流量上限。 ? 超时控制原则:智能网管服务总线平台对服务调用的单次访问时间做相应的检查控制,如果在一定时间内没有完成服务请求/响应过程,将返回给服务消费者异常信息,通知已经访问超时。 3.5 消息持久化原则 服务消费方、服务提供方和集团智能网管总线平台在进行服务调用的过程中均需要分别在各自的系统中对消息进行持久化。为消息对账提供数据基础。 4. 服务接入流程
5. 服务适用场景 5.1 应用型同步接口服务 5.1.1 服务描述 应用型同步接口服务由两个WebService接口组成,分别是由智能网管服务总线平中国电信集团公司--智能网管第5页,共29页
三亿文库包含各类专业文献、中学教育、幼儿教育、小学教育、应用写作文书、高等教育、各类资格考试、专业论文、文学作品欣赏、外语学习资料、10中国电信总线规范等内容。 
 22 安徽电信服务总线 第 4 页,共 24 页 服务总线接口规范 第1章 概述 1.1 概述 本规范明确了安徽电信服务总线接入及服务使用的标准和规 范,为服务使用方和...  ANSI.TIA-942-数据中心的电信基础设施标准_信息与通信_工程科技_专业资料。IDC...( N+1 ) 模块共用一条输出总线 分布式冗余 双总线系统 (2N, 2N+1) 三个...  485总线规范_计算机硬件及网络_IT/计算机_专业资料。RS-232、RS-422 与 RS-...(上升或下降时间)超过电信号沿总线单向传输所需时间的 3 倍以上时就可以不加...  中国电信入户皮线光缆技术要求 中国电信入户皮线光缆技术要求 入户皮线光缆 (...ODN 可以是点到点的星形结构,也可以是 点到多点的树形、总线形和环形无源光...  中国电信笔试题合集_从业资格考试_资格考试/认证_...47、根据交换设备总技术规范书,我国***用户的话务...有五种,分别是网型、星型、复合型、环型、总线型...  75 -3- 四川电信 IPTV 终端技术规范 1 适用范围本标准是对中国电信集团《IPTV...通用串行总线 可扩展标记语言 -7- 四川电信 IPTV 终端技术规范 4 终端定义 ...  电信 网络设备指标中国移动通信企业标准 QB- 008QB-W-008-2007 电信级设备指标...(SCSI) —第 232 部分 : 串行总线协议 -2(SBP-2) 信息技术—小型计算机系...  对 不同电信业务网络的转接,交换设备的性能要求也不...网状网 星型网 复合网 环型网 总线型网 图 3-2...目前, 以 ATM 为骨干的中国电信公用宽带网全网有...电信网络拓扑图自动布局之总线 - xhload3d - 博客园
在前面《》一文中,我们大体介绍了
电信网络拓扑图自动布局的相关知识,但是都没有深入地描述各种自动布局的用法,我们今天在这边就重点介绍总线的具体实现方案。
的连线手册中,有说明可以自定义连线类型,通过 ht.Default.setEdgeType(type, func, mutual) 函数定义,我们今天要描述的总线也是通过这样的方法来实现的。
我们来简单地描述下这个方法,虽然在文档()中已经描述得很详细了,为了下面的工作能够更好的开展,我这边还是再强调下。
这个函数名是 setEdgeType,顾名思义,它是用来自定义一个 EdgeType 的,那么第一个参数 type 就是用来定义这个 EdgeType 的名称,在 Edge&的样式上设置 edge.type 属性为 type 值,就可以让这条连线使用是我们自定义的 EdgeType。
那么第二个参数呢,就是用来计算连线的走线信息的函数,这个回调函数将会传入四个参数,分别是:edge、gap、graphView、sameSourceWithFirstEdge,其中 edge 就是样式上设置 edge.type 属性为 type 值的连线对象,这个参数是最重要的,通常有这个参数就可以完成格式各样的连线了。其他参数在手册中都描述得很清楚,可以转到手册中阅读,。
那这第三个参数呢,是决定连线是否影响起始或结束节点上的所有连线,这个参数解释起来比较复杂,后续有机会的话,我们再详细说明。
先来看看一个简单的例子,。
上图中,可以看到节点间的连线并不是普通的直线,或者简单的折线,而是漂亮的曲线,那么这样的曲线是怎么生成的呢?既然将这个例子放到这边作为案例,那么它一定使用了自定义 EdgeType 的功能,观察图片可以发现曲线其实可以用二次方曲线来表示,所以呢,我们在 setEdgeType 函数的回调中返回的连线走向信息中,将其描述为一条二次方曲线就可以了。说得有些绕,我们来看看代码实现吧。
ht.Default.setEdgeType('custom', function(edge, gap, graphView, sameSourceWithFirstEdge){
var sourcePoint = edge.getSourceAgent().getPosition(),
targetPoint = edge.getTargetAgent().getPosition(),
points = new ht.List();
points.add(sourcePoint);
points.add({
x: (sourcePoint.x + targetPoint.x)/2,
y: (sourcePoint.y + targetPoint.y)/2 + 300
points.add(targetPoint);
points: points,
segments: new ht.List([1, 3])
从代码中可以看出,返回到顶点是连线的起点和终点,还有中间的二次方曲线的控制点,还有设置了顶点的连线方式,就是在 return 中的 segments,1 代表是路径的起点,3 代表的是二次方曲线,这些相关知识点在 HT for Web 的形状手册中描述得很清楚,不懂的可以转到手册详细了解,。
前面的废话太多了,下面就是我们今天的主要内容了,看看如何通过自定义 EdgeType 来实现总线的效果,。
上图就是一个总线的简单例子,所有的节点都通过线条链接黑色的总线,连线的走向都是节点到总线的最短距离。
来讲讲整体的设计思路吧,其实总的来说,就是点的线的垂直点计算问题。那么问题来了,碰到曲线怎么办?其实曲线也是可以微分成线条来处理的,至于这个线段的划分精细度就需要用户来自定义了。
EdgeType 结合 ShapeLayout 实现均匀自动布局:。
但是,像上图所示的椭圆形总线该如何处理呢?对于这种有固定表达式的形状,我们就不需要用曲线分割的方法来做总线布局了,我们完全可以获取到圆或者椭圆上的一点,所以在处理圆和椭圆上,我们获取 Edge 连边节点中线连成线,然后计算出夹角,通过圆或者椭圆的三角函数表示法计算出总线上的一点,这样来构成连线。
在上图中,我们用到了 ShapeLayout 来自动布局和总线相连的节点,让其相对均匀地分布在总线周围,对于 ShapeLayout 的相关设计思路我们在后面的章节中再具体介绍。
那么我们今天的内容就到这里了,对于总线的设计是不是很简单呢,下面附上总线的所有代码,有需要的话,可以直接复制出来,在页面中引入
的核心包 ht.js 后面引入以下代码就可以直接使用总线功能了。代码不多,也就将近 200 行,感兴趣的朋友可以通读一遍,有什么问题,还请不吝赐教。
;(function(window, ht) {
var getPoint = function(node, outPoint) {
var rect = node.getRect(),
pos = node.getPosition(),
p = ht.Default.intersectionLineRect(pos, outPoint, rect);
if (p) return { x: p[0], y: p[1] };
var pointToInsideLine = function(p1, p2, p) {
var x1 = p1.x,
y1 = p1.y,
x2 = p2.x,
y2 = p2.y,
result = {},
dx = x2 - x1,
dy = y2 - y1,
d = Math.sqrt(dx * dx + dy * dy),
ca = dx / d, // cosine
sa = dy / d, // sine
mX = (-x1 + x) * ca + (-y1 + y) *
result.x = x1 + mX *
result.y = y1 + mX *
if (!isPointInLine(result, p1, p2)) {
result.x = Math.abs(result.x - p1.x) & Math.abs(result.x - p2.x) ? p1.x : p2.x;
result.y = Math.abs(result.y - p1.y) & Math.abs(result.y - p2.y) ? p1.y : p2.y;
dx = x - result.x;
dy = y - result.y;
result.z = Math.sqrt(dx * dx + dy * dy);
var isPointInLine = function(p, p1, p2) {
return p.x &= Math.min(p1.x, p2.x) &&
p.x &= Math.max(p1.x, p2.x) &&
p.y &= Math.min(p1.y, p2.y) &&
p.y &= Math.max(p1.y, p2.y);
var bezier2 = function(t, p0, p1, p2) {
var t1 = 1 -
return t1*t1*p0 + 2*t*t1*p1 + t*t*p2;
var bezier3 = function(t, p0, p1, p2, p3 ) {
var t1 = 1 -
return t1*t1*t1*p0 + 3*t1*t1*t*p1 + 3*t1*t*t*p2 + t*t*t*p3;
var distance = function(p1, p2) {
var dx = p2.x - p1.x,
dy = p2.y - p1.y;
return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
var getPointWithLength = function(length, p1, p2) {
var dis = distance(p1, p2),
temp = length / dis,
dx = p2.x - p1.x,
dy = p2.y - p1.y;
return { x: p1.x + dx * temp, y: p1.y + dy * temp };
var getPointInOval = function(l, r, p1, p2) {
var a = Math.atan2(p2.y - p1.y, p2.x - p1.x);
return { x: l * Math.cos(a) + p1.x, y: r * Math.sin(a) + p1.y };
ht.Default.setEdgeType('bus', function(edge, gap, graphView, sameSourceWithFirstEdge) {
var source = edge.getSourceAgent(),
target = edge.getTargetAgent(),
shapeList = ['circle', 'oval'],
shape, beginNode, endN
if (shapeList.indexOf(source.s('shape')) &= 0) {
shape = source.s('shape');
beginNode =
else if (shapeList.indexOf(target.s('shape')) &= 0) {
shape = target.s('shape');
beginNode =
if (shapeList.indexOf(shape) &= 0) {
var w = beginNode.getWidth(),
h = beginNode.getHeight(),
l = Math.max(w, h) / 2,
r = Math.min(w, h) / 2;
if (shape === 'circle') l = r = Math.min(l, r);
var p = getPointInOval(l, r, beginNode.getPosition(), endNode.getPosition());
points: new ht.List([ p, getPoint(endNode, p) ]),
segments: new ht.List([ 1, 2 ])
var segments, points, endP
if (source instanceof ht.Shape) {
segments = source.getSegments();
points = source.getPoints();
beginNode =
endPoint = target.getPosition();
else if (target instanceof ht.Shape) {
segments = target.getSegments();
points = target.getPoints();
beginNode =
endPoint = source.getPosition();
if (!points) {
points: new ht.List([
getPoint(source, target.getPosition()),
getPoint(target, source.getPosition())
segments: new ht.List([ 1, 2 ])
if (!segments && points) {
segments = new ht.List();
points.each(function() { segments.add(2); });
segments.set(0, 1);
var segLen = segments.size(),
segV, segNextV, beginPoint, j,
p1, p2, p3, p4, p, tP1, tP2, tRes,
curveResolution = beginNode.a('edge.curve.resolution') || 50,
pointsIndex = 0;
for (var i = 0; i & segLen - 1; i++) {
segNextV = segments.get(i + 1);
if (segNextV === 1) {
pointsIndex++;
p1 = points.get(pointsIndex++);
if (segNextV === 2 || segNextV === 5) {
p2 = points.get((segNextV === 5) ? 0 : pointsIndex);
p = pointToInsideLine(p1, p2, endPoint);
if (!beginPoint || beginPoint.z & p.z)
beginPoint =
else if (segNextV === 3) {
p2 = points.get(pointsIndex++);
p3 = points.get(pointsIndex);
tP2 = { x: p1.x, y: p1.y };
for (j = 1; j &= curveR j++) {
tP1 = tP2;
tRes = j / curveR
x: bezier2(tRes, p1.x, p2.x, p3.x),
y: bezier2(tRes, p1.y, p2.y, p3.y),
p = pointToInsideLine(tP1, tP2, endPoint);
if (!beginPoint || beginPoint.z & p.z)
beginPoint =
else if (segNextV === 4) {
p2 = points.get(pointsIndex++);
p3 = points.get(pointsIndex++);
p4 = points.get(pointsIndex);
tP2 = { x: p1.x, y: p1.y };
for (j = 1; j &= curveR j++) {
tP1 = tP2;
tRes = j / curveR
x: bezier3(tRes, p1.x, p2.x, p3.x, p4.x),
y: bezier3(tRes, p1.y, p2.y, p3.y, p4.y),
p = pointToInsideLine(tP1, tP2, endPoint);
if (!beginPoint || beginPoint.z & p.z)
beginPoint =
endPoint = getPoint(endNode, beginPoint);
points: new ht.List([
{ x: beginPoint.x, y: beginPoint.y },
segments: new ht.List([ 1, 2 ])
}(window, ht));

参考资料

 

随机推荐