主题
企业架构
理解 IMS 计费架构
页面: 1, 2
创建Rf请求相当简单。让我们从一个基于会话的请求入手。如前所述,获得RfApplication和RfSession之后,我们使用RfSession对象创建一个新Accounting-Request。由于这是第一个请求,requestType将以值的形式出现:
ACR acr = session.createACR(RecordType.START);
创建Event请求的代码为:
ACR acr = session.createACR(RecordType.INTERIM);
创建一个新Accounting-Request时,将会自动填充以下AVP:
| 属性 | 值 |
| Session-Id | 自动生成 |
| Origin-Host | 根据diameter.xml中的节点设置 |
| Origin-Realm | 根据diameter.xml中的节点设置 |
| Acct-Application-Id | 3,表示Diameter Base Accounting |
| Destination-Host | RfApplication中cdf.host参数的值,设置在diameter.xml中 |
| Destination-Realm | RfApplication中cdf.realm参数的值,设置在diameter.xml中 |
可以通过调用addAvp方法添加其他AVP:
Acr.addAvp(Attribute.EVENT_TIMESTAMP, new Integer(timestamp));
对Ro接口的请求(比如说Credit-Control-Requests)的创建方式非常类似于创建Accounting-Requests的方式。以下这个示例可以说明一切:
CCR ccr = roSes.createCCR(RequestType.INITIAL);
注意,Credit Control的请求类型与账户的记录类型有所不同——比如,START和INITIAL。事件请求可直接通过RoApplication创建,而不需要明确地创建一个会话:
CCR eventCcr = roApp.createEventCCR();
在两种情况下,WebLogic SIP Server都会自动设置以下表格中的AVP。
| 属性 | 值 |
| Session-Id | 根据diameter.xml中的节点设置 |
| Origin-Realm | 根据diameter.xml中的节点设置 |
| Auth-Application-Id | 4,表示Diameter Credit-Control |
| Destination-Host | RoApplication中ocs.host参数的值,设置在diameter.xml中 |
| Destination-Realm | RoApplication中ocs.realm参数的值,设置在diameter.xml中 |
| CC-Request-Type | 由createCCR()的参数指示;对于createEventCCR()其值为EVENT_REQUEST (4) |
| CC-Request-Number | 会话每创建一个CCR该数字就自增1 |
可以使用与前面相同的方法添加其他AVP。
Diameter Base属性是Attribute类中的静态字段。此外,与计费相关的属性可以在Charging类和CreditControl类中找到。WebLogic SIP Server并未限制用户使用这些预先定义的属性。可以使用Attribute.define()方法之一来创建新属性。Attribute类包含为所有基本属性预先定义的常量。以下示例展示了如何添加一个AVP:
public static final Attribute SUBSCRIPTION_ID_TYPE = Attribute.define(666, "Subscription-Id-Type", Type.INTEGER);
添加一个已经由用户或容器定义过的AVP时,WebLogic Sip Server会抛出一个异常。添加完所有必要的AVP后,我们最后还要发送CCR。可以使用以下两种方法完成这一操作:
ccr.send();
// - or -
CCA answer = (CCA)ccr.sendAndWait();
第二种方法会发送CCR并阻塞执行,直到接收到应答或发生超时。
WebLogic SIP Server Diameter API中有两种接收应答的方法。第一种是异步方式,以Request.sendAndWait()方法为基础。这个方法会发送请求并阻塞呼叫线程直到接收到应答或请求超时。它会返回接收到的应答。发送请求的异步方式适用于阻塞线程不会造成问题的应用程序。
第二种方法是异步分离发送动作和接收动作。请求是通过调用Request.send()发送的。这个方法会立刻返回。接收到应答时,该方法会调用其rcvMessage()方法通知监听程序。这个监听程序必须要实现SessionListener接口,而且必须要在接收到应答之前建立在会话中。以下示例演示了这种方法:
//This is a listener class
class MyListener implements SessionListener {
public void rcvMessage(Message message) {
System.out.println("Received a message: " + message);
if(message.getCommand().equals(CreditControl.CCA)) {
System.out.println("The message is a Credit-Control-Answer");
}
}
}
//This code is inside some other (or the same) class, in a method
//responsible for sending the request
//Create session and listener
RoSession roSes = roApp.createSession();
MyListener myListener = new MyListener();
//Set the listener on the session
roSes.setListener(myListener);
//Now create and send a request
CCR ccr = roSes.createCCR(RequestType.INITIAL);
ccr.addAvp(...);
ccr.send();
//send() returns immediately. Answer will be received in
//myListener.rcvMessage()
带有监听程序的实现还可以允许我们接收当前会话内的服务器所发送的请求(比如说,当服务器决定马上关闭会话时所发送的Abort-Session-Request)。请求和应答都以同样的方式传递给监听程序的rcvMessage()方法。由应用程序负责为请求和应答提供不同的行为。
在设定时间内未收到请求的应答时,WebLogic SIP Server会自动检测超时条件。diameter.xml中配置了超时的默认值。还可以使用带参数的send(...)或sendAndWait(...)为各个请求分别指定超时的时间。
WebLogic SIP Server通过创建一个带有结果代码DIAMETER_UNABLE_TO_DELIVER的响应来处理超时。实际上,并不会在网络上发送响应,但是会将其传递给发送请求的应用程序。这种处理超时的方法类似于SIP中所使用的方法。
同样,WebLogic SIP Server可抛出以下两种异常:
WebLogic SIP Server中的日志记录工具可用于跟踪传入和传出消息。您可以使用控制台配置消息调试。此外,也可以通过在脚本文件(类Unix的机器中为sh文件,Windows平台中则为cmd)中的-Ddiameter.Debug=true选项来设置消息调试。调试消息将直接发送给控制台。
除了在WLSS中设置调试之外,使用网络嗅探程序也是大有帮助。这种类型的程序可以显示在网络中传输的报文。Wireshark(原来称作Ethereal)可能是最受欢迎的嗅探程序,它是一款免费软件。
Ro和Rf接口的示例应用程序可以从此处下载。 这个应用程序为一个SIP会话提供了Diameter Ro/Rf计费功能。接收到一个INVITE时请求,应用程序会通过发送一个类型INITIAL的CCR来启动会话。然后,用完所有准许的存款后,应用程序会通过发送UPDATE CCR来请求新的存款。接收到BYE消息时,应用程序会通过发送TERMINATION CCR来关闭计费会话。
在存款用完的情况下,应用程序也会关闭会话。如果CCA中接收到一个Final-Unit-Indication AVP,并且所有准许额度都已用完,则应用程序会通过发送BYE消息来断开SIP会话。应用程序还会发送一个TERMINATION CCR来关闭Diameter会话。
BEA WebLogic Sip Server提供了一种简单的测试方法,可以使用一个Rf接口的独立的模拟程序测试自己的应用程序。模拟程序可以作为独立的应用程序运行,模拟程序的离线计费接口为com.bea.wcp.diameter.charging.RfSimulator。
此外,BEA还提供了一个HSS模拟程序用于存储与服务相关的数据,可以使用相同的方式运行该模拟程序。注意,这个模拟程序是用于测试目的的,并且只支持RepositoryData和PSI。HSS模拟程序为com.bea.wcp.diameter.sh.HSSSimulator。
这两种模拟的命令行选项如下所示:
以下示例演示了如何运行一个独立的BEA Rf模拟程序:
java com.bea.wcp.diameter.util.Launcher -apps com.bea.wcp.diameter.charging.RfSimulator -r bea.com -h simulator -p 3900 -d -m
我们也可以运行多个模拟程序,比如使用以下脚本运行HSS模拟程序:
java com.bea.wcp.diameter.util.Launcher -apps com.bea.wcp.diameter.charging.RfSimulator,com.bea.wcp.diameter.sh.HssSimulator -h simulator -r bea.com -p 3900 -d -m
记住要先运行\sipserver30\server\bin\ directory目录下的setWLSEnv脚本。
Ericpol Telecom已成功将其运行于BEA WLSS 3.0之上的IMS预付费解决方案(IMS Prepaid Solution)与Amdocs IMS计费解决方案(Amdocs IMS Charging Solution)集成在一起。IMS预付费解决方案通过其各组件的集成和相互协作提供了一种具有丰富特性的、兼容IMS的、可互操作的、电信级的解决方案。在这种集成场景中,IMS预付费解决方案通过Rf和Ro接口与Amdocs IMS计费解决方案相互通信。其网络结构如下所示:
图11. BEA-Ericpol-Amdocs IOT的网络架构(单击图片查看大图)
BEA-Ericpol IMS Prepaid和Amdocs Charging之间的互操作性测试(interoperability testing,IOT)包含以下两个阶段:离线和在线计费。各个场景的消息流包含在本文结尾的附加文件中。
IOT已经证实WebLogic SIP Server中的Diameter实现符合协议规范。它还显示对Java API的完全编程控制使得Diameter实现极具灵活性。在PoC过程中需要进行几次小更改。这些更改的实现快速而简单。
IOT中所使用的Amdocs IMS计费解决方案基于Amdocs在线计费(Amdocs Online Charging)系统。与3GPP标准一致,这种在线计费功能通过Diameter接口与核心IMS网络进行交互(在线计费系统接口的Diameter引用点)。此外,Amdocs IMS计费解决方案中的两种关键组件是Amdocs Rating和Amdocs Balance Manager。要与IMS呼叫会话控制函数进行交互(以实现离线计费),针对IMS的3GPP标准定义了以下两个组件:计费数据函数(charging data function,CDF)和计费网关函数(charging gateway function,CGF)。这些函数可以构造、关联和格式化与计费事件相关的信息,并将这些信息传递给账单系统。Amdocs Service Mediation Manager是Amdocs IMS计费解决方案的一部分,它经过改进后符合3GPP标准并且其本身可以提供CDF和CGF功能。
如今,服务提供商开始争先实现IMS架构并提供越来越多的复杂服务,与此同时,他们也不得不开始面对各种问题:如收益率、定价、资本回报率和服务质量等等。Amdocs使用了一套横向的、统一的、模块化的IMS就绪计费产品,实现了一种完善的IMS计费方式,并且很好地解决了上述问题。如Ericpol和BEA的IOT测试所示,Amdocs计费解决方案具有以下优点:
已经证实,Diameter成功克服了RADIUS的局限。它如今已成为IMS标准的一部分。基于IP和电话技术的新服务的开发现正在迅速发展,每一项服务都需要计费功能。因此,基于Diameter计费的普及指日可待。
通过阅读本文,您应该了解了Ro和Rf接口的基本概念,并知道如何使用BEA WebLogic SIP Server处理它们。现在,您已经可以借助所学的知识着手开发自己的应用程序
作者感谢 Rafi Kretchmer,Amdocs的Revenue Management Product & Solutions Marketing部门的产品营销总监。Rafi负责为Amdocs的产品收益管理制订IMS业务战略,包括行业领先的Amdocs Billing产品组合。
3GPP - 3rd Generation Partnership Project
AAA - Authentication, Authorization, and Accounting
ABMF - Account Balance Management Function
ACA - Accounting Answer
ACR - Accounting Request
API - Application Programming Interface
AS - Application Server
AVP - Attribute-Value Pair
BGCF - Breakout Gateway Control Function
CCA - Credit-Control Answer
CCR - Credit-Control Request
CDF - Charging Data Function
CDR - Charging Data Record
CGF - Charging Gateway Function
CSCF - Call Session Control Function
CTF - Charging Trigger Function
DCC - Diameter Credit-Control application
GGSN - Gateway GPRS Support Node
GPRS - General Packet Radio Service
HSS - Home Subscriber Server
HTTP - HyperText Transfer Protocol
ICID - IMS Charging Identifier
I-CSCF - Interrogating-CSCF
IMS - IP Multimedia Subsystem
IMS-GWF - IMS Gateway Function
MGCF - Media Gateway Control Function
MRFC - Media Resource Function Controller
OCF - Online Charging Function
OCS - Online Charging System
P-CSCF - Proxy-CSCF
RF - Rating Function
RFC - Request For Comments
S-CSCF - Serving-CSCF
SGSN - Serving GPRS Support Node
SIP - Session Initiation Protocol
WLSS - BEA WebLogic SIP Server
Stefano Gioia 是EMEA的BEA WebLogic Sip Server 技术专家。他把主要精力都放在让IMS及其工作人员和合作伙伴能够跨越欧洲、中东和非洲的努力上。
Tomasz Radziszewski 是Ericpol Telecom的软件研发工作师。