首页 > 其他分享 >JAIN-SLEE 架构及如何运作

JAIN-SLEE 架构及如何运作

时间:2024-09-16 20:22:20浏览次数:13  
标签:电话 架构 SLEE SBB 通话 事件 JAIN 呼叫

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 来处理结束流程。

标签:电话,架构,SLEE,SBB,通话,事件,JAIN,呼叫
From: https://blog.csdn.net/pumpkin84514/article/details/142306466

相关文章

  • TAG:BladeLLM 的纯异步推理架构
    作者:张子鹏PAI引擎团队随着GQA/MLA/MoE等模型结构不断发展,大语言模型的推理逐步解除了显存限制,逐渐向着高并发、高吞吐的方向发展。推理引擎的运行时开销也变得不可忽视。主流LLM推理框架的运行时开销大致来自:Python性能:考虑用户易用性和开发效率,业界主流框架都采用Python......
  • 逆向工程 O1模型架构
    深入解析o1架构:借助Claude的逆向工程这张图展示了o1的模型架构的高层次设计,通过逆向工程和Claude的帮助,对其进行了详细分析。1、数据生成(DataGeneration)数据生成模块负责创建用于训练的数据,包括:-合成数据生成器(SyntheticDataGenerator)-人类专家(HumanExperts)-CoT数据库......
  • 鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》
    笔记来自新书:《鸿蒙操作系统设计原理与架构》HarmonyOS采用分层架构,从下到上依次分为内核层、系统服务层、框架层和应用层。1. 内核层内核层主要提供硬件资源抽象和常用软件资源,包括进程/线程管理、内存管理、文件系统和IPC(Interprocess Communication,进程间通信)等。......
  • 1张超级“支付清算架构”图
    在支付行业的快速发展中,理解和掌握支付清算架构对于从业人员来说至关重要。本文将通过一张精心绘制的“超级支付清算架构图”,带领读者深入探索支付生态的全貌。这张图不仅包含了丰富的支付组织、系统建设和账户基础等信息,而且通过高维度抽象,展示了它们之间复杂的交互关系。本......
  • 安卓架构
    安卓架构目录1Linux内核层2硬件抽象层HAL3NativeC/C++库&&AndroidRuntime4JavaFramework层5SystemApps层1Linux内核层Android平台的基础是Linux内核。例如,ART依靠Linux内核来执行底层功能。Linux内核的安全机制为Android提供了相应的保障,也......
  • 信息架构的战略视角:驱动数字化转型的设计原则与实践创新
    在数字经济快速发展的今天,企业的成功越来越依赖于其信息架构的稳健性和灵活性数字化转型不仅要求技术创新,更需要架构设计上的深思熟虑。《信息架构:商业智能&分析与元数据管理参考模型》作为信息架构领域的权威指南,为企业提供了宝贵的实践经验和应用策略。《信息架构:商业智能&......
  • 二级缓存架构极致提升系统性能
    前言随着k8s成为用云新界面,容器成为众多用户“弹性”的利器,因此容器的创建天生具备高并发特性。高并发、大数据量下,为了提供更好的容器弹性体验,笔者通过二级缓存的设计,成功优化了系统性能、资源消耗、系统容量。但持续压榨性能的道路是曲折的。各种缓存方案需要考虑非常多因素,包括......
  • 高级java每日一道面试题-2024年9月12日-架构篇[DDD领域驱动篇]-如何使用领域驱动设计(D
    如果有遗漏,评论区告诉我进行补充面试官:如何使用领域驱动设计(DDD)中的事务脚本模式?我回答:在Java高级面试中,讨论如何使用领域驱动设计(DDD)中的事务脚本模式是一个很好的话题,因为它不仅考察了面试者对DDD原则的理解,还检验了其在实际项目中应用这些原则的能力。事务脚本模......
  • 高可用架构
    高可用架构主备一致基本原理M-S架构:客户端的读写都直接访问A库,直到切换时把客户端读写切换给B库,A变成备库备库设置为readonly状态:防止切换过程出现双写,可以用readonly状态判断节点的角色基本原理:主库A和备库B之间维持一个长连接,主库内部有一个线程专门用于服务B的这个长连......
  • 9、【实战中提升自己】华为 华三中小型企业网络架构搭建 【无线架构之低速率限制与负
     1 拓扑与说明         某公司的网络架构,这样的架构在目前的网络中是在常见的,假设您接收一个这样的网络,应该如何部署,该实战系列,就是一步一步讲解,如何规划、设计、部署这样一个环境,这里会针对不同的情况给出不同的讲解,比如拓扑中有2个ISP,假设客户需求是,想实现主备的......