JAIN-SLEE 架构及如何运作

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 系统可以理解的事件。

举例:

java 复制代码
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 来处理事件。

举例:

java 复制代码
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

java 复制代码
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

java 复制代码
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 就是处理呼叫结束事件的组件,它会记录通话的时长等信息。

举例:

java 复制代码
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 来处理结束流程。
相关推荐
DreamByte16 分钟前
Python Tkinter小程序
开发语言·python·小程序
覆水难收呀25 分钟前
三、(JS)JS中常见的表单事件
开发语言·前端·javascript
阿华的代码王国29 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
繁依Fanyi35 分钟前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
weixin_486681141 小时前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
基德爆肝c语言1 小时前
C++入门
开发语言·c++
怀九日1 小时前
C++(学习)2024.9.18
开发语言·c++·学习·面向对象·引用·
一道秘制的小菜1 小时前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
易辰君1 小时前
Python编程 - 协程
开发语言·python
布洛芬颗粒1 小时前
JAVA基础面试题(第二十二篇)MYSQL---锁、分库分表!
java·开发语言·mysql