JAIN-SLEE 架构及如何运作

news/2024/12/23 0:20:21/

JAIN-SLEE(Java API for Integrated Networks - Service Logic Execution Environment)是一种架构,用于构建实时电信应用程序,如电话呼叫控制、短信发送、会议电话等。这类应用程序需要能够快速响应来自用户或系统的事件,保证通信系统的高效运作。

为了更容易理解 JAIN-SLEE 的架构,可以将其比作一家工厂:工厂的任务是处理很多订单,每个订单都是一个事件,而工厂中的各种机器负责处理这些订单。JAIN-SLEE 就像一个工厂管理系统,确保不同的机器(或服务)能够高效处理大量的事件。让我们一步一步解释它的各个组成部分。

1. SLEE(Service Logic Execution Environment)是什么?

SLEE 是整个 JAIN-SLEE 架构的核心部分,负责管理和执行电信服务中的逻辑。你可以把 SLEE 看作是一个“操作系统”,它管理所有的服务模块,并确保这些服务能够正确响应外部事件。

2. SBB(Service Building Block)——服务构建块

SBB 是 JAIN-SLEE 中的核心模块之一。每个 SBB 是用来处理特定任务的独立模块,比如处理一个电话呼叫或发送一条短信。可以把 SBB 比作工厂里的某台机器,每台机器都有明确的职责,接收并处理某种特定的订单(事件)。

SBB 的特点

  • 无状态:SBB 不会记住之前处理的事件,每次处理事件都是独立的。如果你需要记录状态,可以用 Activity Context 来存储。
  • 事件驱动:SBB 依靠事件触发,比如用户发起电话呼叫就是一个事件,SBB 收到事件后做出响应。

理解: 比如,当你打电话时,这就是一个事件,系统中有一个 SBB 负责接听电话,另一个 SBB 可能负责记录电话的通话时长,所有这些 SBB 组合在一起,构成一个完整的电话服务。

3. 事件(Event)

JAIN-SLEE 架构中,事件就像是信号或通知,它们表示系统中的某些活动或动作。比如“电话来了”是一个事件,“短信发出”也是一个事件。事件驱动了整个系统的运行。

**举例:**当你打电话时,系统接收到一个“呼叫事件”,然后负责处理电话的 SBB 会响应这个事件,并启动后续操作。

4. 活动(Activity)和活动上下文(Activity Context)

  • Activity(活动):指的是用户或系统发起的一个持续操作,比如一次电话通话或一场会议。
  • Activity Context(活动上下文):可以理解为系统用来记录活动信息的“记事本”。每个活动上下文保存关于某个活动的状态信息,确保系统能够在处理长时间操作(如电话通话)时不丢失状态。

理解: 当你拨打电话时,系统为这个通话创建了一个活动(Activity),记录了通话的状态,比如通话的开始时间、参与者等。SBB 可以通过 Activity Context 来获取和更新这些信息。

5. 资源适配器(Resource Adapter)

资源适配器是 JAIN-SLEE 中用来与外部资源(比如网络、数据库、媒体服务器)进行通信的模块。它们像是“桥梁”,将外部世界的资源引入到 SLEE 环境中。

举例: 资源适配器可以连接到电话交换机,接收真实世界的电话呼叫信息,然后将这些信息作为事件传递给 SBB 进行处理。

6. 服务(Service)

在 JAIN-SLEE 中,多个 SBB 组合在一起可以构建一个完整的服务。比如,一个电话呼叫服务可以由多个 SBB 组成:一个负责建立呼叫,一个负责记录通话时长,另一个负责结束呼叫。所有这些 SBB 协作,形成一个服务。

7. 服务调度(Service Invocation)

服务调度就是当某个事件发生时,系统决定哪个 SBB 来处理这个事件。这个过程就像工厂接到一个新订单时,工厂的管理系统决定把这个订单交给哪台机器来处理。

8. 事件路由(Event Routing)

事件路由是 JAIN-SLEE 系统内部的机制,它将接收到的事件分发到合适的 SBB。就像工厂里的物流系统,确保每个订单被送到正确的机器。


JAIN-SLEE 架构是如何运作的?

整个 JAIN-SLEE 系统可以简单描述为一个事件驱动的实时处理系统,它接收来自外部的事件,然后根据事件类型调用对应的 SBB 进行处理。

  1. 事件产生:某个事件(例如电话呼叫、短信发送)被触发。这个事件被 SLEE 监控到。
  2. 事件路由:SLEE 将这个事件路由到合适的 SBB,SBB 会处理该事件。
  3. SBB 响应事件:SBB 执行相应的业务逻辑,处理事件,比如应答电话、发送短信等。
  4. 处理结果:处理完成后,SBB 可以生成新的事件或者修改系统的状态,结束整个处理流程。

要理解 JAIN-SLEE 如何运作,最好的方法是通过一个具体的示例来演示每个组件如何协调交互。我们以一个典型的“电话呼叫处理”场景为例,逐步讲解每个部分是如何运作的。

系统场景:电话呼叫处理

假设我们有一个电话呼叫服务,当用户拨打电话时,系统需要:

  1. 接收电话呼叫事件
  2. 处理呼叫事件并连接双方
  3. 在通话结束后记录通话信息

这个过程涉及多个组件的协调,下面我们会分步骤讲解每个组件的职责,以及它们如何互相交互。

1. 事件的产生:电话呼叫事件

当用户拨打电话时,电话交换机会产生一个“呼叫事件”(Call Event)。此时,系统需要接收这个事件。通常情况下,事件是由资源适配器(Resource Adapter)从外部资源(例如电话网络)接收到的。

  • 资源适配器相当于负责接入电话网络的桥梁,它会把电话系统中的信号(呼叫、挂断等)转换为 JAIN-SLEE 系统可以理解的事件。

举例:

public class CallEvent {private String callerNumber;private String calleeNumber;public CallEvent(String caller, String callee) {this.callerNumber = caller;this.calleeNumber = callee;}public String getCallerNumber() { return callerNumber; }public String getCalleeNumber() { return calleeNumber; }
}

这里 CallEvent 代表一个电话呼叫事件,包含了呼叫者和被呼叫者的信息。

2. SLEE 负责事件管理和调度

事件产生后,SLEE 会将这个事件分发给负责处理电话呼叫的组件,这个组件就是SBB(Service Building Block)。

  • SLEE 就像系统的“大脑”,它负责管理事件的路由和调度。每当资源适配器传来一个事件,SLEE 会根据配置,找到合适的 SBB 来处理事件。

举例:

public class CallSbb implements Sbb {// 处理电话呼叫事件的回调方法public void onCallEvent(CallEvent event, ActivityContextInterface aci) {System.out.println("接收到呼叫事件,呼叫者:" + event.getCallerNumber() + ",被呼叫者:" + event.getCalleeNumber());// 这里可以添加处理逻辑,比如尝试接通电话}
}

这个 SBB 的 onCallEvent 方法会响应电话呼叫事件,打印出呼叫者和被呼叫者的号码。

3. SBB 处理电话呼叫

SBB 接收到事件后,会根据事件类型,执行相应的逻辑。例如,当 SBB 收到“呼叫事件”时,系统会尝试接通电话。这个过程可能会涉及多个 SBB 的协调:

  1. 接听呼叫 SBB:负责接听电话并建立通话。
  2. 记录通话 SBB:负责记录通话信息,例如通话时长、开始和结束时间。

接听呼叫 SBB

public class AnswerCallSbb implements Sbb {public void onCallEvent(CallEvent event, ActivityContextInterface aci) {System.out.println("尝试接通电话,呼叫者:" + event.getCallerNumber());// 模拟接通电话connectCall(event.getCallerNumber(), event.getCalleeNumber());}private void connectCall(String caller, String callee) {System.out.println("电话已接通,呼叫者:" + caller + ",被呼叫者:" + callee);}
}

记录通话 SBB

public class RecordCallSbb implements Sbb {public void onCallEndEvent(CallEndEvent event, ActivityContextInterface aci) {System.out.println("记录通话,通话时长:" + event.getCallDuration() + "秒");// 将通话信息存入数据库saveCallRecord(event.getCallerNumber(), event.getCallDuration());}private void saveCallRecord(String caller, int duration) {System.out.println("通话记录已保存,呼叫者:" + caller + ",通话时长:" + duration + "秒");}
}

4. 事件结束与系统交互

当通话结束时,电话系统会产生一个“呼叫结束事件”(Call End Event)。这个事件同样会通过资源适配器传递给 SLEE,SLEE 再把事件路由给负责处理结束事件的 SBB。

在这里,RecordCallSbb 就是处理呼叫结束事件的组件,它会记录通话的时长等信息。

举例:

public class CallEndEvent {private String callerNumber;private int callDuration;public CallEndEvent(String caller, int duration) {this.callerNumber = caller;this.callDuration = duration;}public String getCallerNumber() { return callerNumber; }public int getCallDuration() { return callDuration; }
}

通话结束后,CallEndEvent 事件会触发,SBB 通过获取通话时长来完成数据保存。

5. 系统内的协调与管理

在整个流程中,SLEE 负责管理和调度所有的 SBB 和事件。SLEE 会根据系统配置的规则,将不同的事件分发到对应的 SBB 去处理。

例如,当用户拨打电话时,SLEE 会将呼叫事件传递给 AnswerCallSbb 来接听电话;当通话结束时,SLEE 会将通话结束事件传递给 RecordCallSbb 来记录通话信息。

  • 事件驱动架构:SLEE 系统基于事件来驱动业务逻辑。任何操作的触发都源于事件(如呼叫事件、结束事件等),然后 SLEE 决定哪个 SBB 来处理。

JAIN-SLEE 系统的运作流程总结

  1. 事件产生:外部系统产生事件(例如电话呼叫)。
  2. 事件路由:资源适配器将事件发送给 SLEE,SLEE 决定路由哪个 SBB 处理事件。
  3. SBB 响应事件:SBB 收到事件后,执行相应的业务逻辑,例如接听电话、记录通话等。
  4. 系统持续处理:在整个电话通话过程中,多个 SBB 可能协作工作,处理不同的任务。
  5. 事件结束:当事件(如电话通话)结束时,SLEE 将新事件分发给另一个 SBB 来处理结束流程。

http://www.ppmy.cn/news/1526635.html

相关文章

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别?⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别?⭐️⭐️⭐️ArrayList 和 Vector 区别?⭐️⭐️ArrayList 的扩容机制?⭐️⭐️⭐️ Qu…

sqli-labs靶场自动化利用工具——第6关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生,或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?可能有些人会说不是有sqlmap&#…

烧结机等调速系统电气设计-大作业/毕设

目录 1. 主要任务2.设计框架原理部分举例:选型部分举例:方案设计部分举例: 3. 交流讨论 1. 主要任务 以烧结机为例,设计基于PLC控制变频器对烧结机的调速系统的设计。主要运用了变频器,PLC等设备。并基于某型号变频器…

什么是 HTTP/3?下一代 Web 协议

毫无疑问,发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建,并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…

SpringBoot教程(安装篇) | RabbitMQ的安装

SpringBoot教程(安装篇) | RabbitMQ的安装 一、下载RabbitMQ(windows版本)1. 先下载 RabbitMQ2. 再下载Erlang3. 开始安装 Erlang4. 为Erlang配置环境变量5、验证安装6. 开始安装 RabbitMQ7. 启用RabbitMQ的管理插件(图…

Python Pyvis库创建交互式网络图 高级功能详解

文章目录 动态网络图图布局调整扩展到大规模网络动态网络图 Pyvis支持创建动态网络图,通过时间轴展示网络图的演化过程。 需要使用set_options函数,参数必须为json格式。动态网络图支持添加点和边。 下面是一个简单的动态网络图示例: # 动态网络图示例 from pyvis.networ…

小程序开发设计-第一个小程序:创建小程序项目④

上一篇文章导航: 小程序开发设计-第一个小程序:安装开发者工具③-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219152?spm1001.2014.3001.5501 须知:注:不同版本选项有所不同,并无大碍。 一、创…

胤娲科技:解锁AI奥秘——产品经理的智能进化之旅

当AI不再是遥不可及的科幻 想象一下,你走进一家未来感十足的咖啡厅,无需言语,智能咖啡机就能根据你的偏好调制出一杯完美的拿铁; 打开手机,AI助手不仅提醒你今天有雨,还贴心推荐了最适合雨中漫步的音乐列表…