Class ThreadRoutingContext

java.lang.Object
com.bytedesk.service.routing_strategy.ThreadRoutingContext

@Component public class ThreadRoutingContext extends Object
线程路由上下文 - 策略模式实现

功能: 1. 管理不同类型线程的路由策略 2. 根据线程类型自动选择合适的策略处理线程创建 3. 支持动态策略注册和查找

策略命名规范: - 策略Bean名称:{threadType}ThreadStrategy (如:agentThreadStrategy) - 策略类名:{ThreadType}ThreadRoutingStrategy (如:AgentThreadRoutingStrategy)

支持的线程类型: - AGENT: 一对一客服线程 - WORKGROUP: 工作组客服线程 - ROBOT: 机器人线程 - WORKFLOW: 工作流线程 - UNIFIED: 统一客服入口线程

Since:
1.0.0
Author:
jackning 270580156@qq.com
  • Field Details

    • strategyMap

      private final Map<ThreadTypeEnum,AbstractThreadRoutingStrategy> strategyMap
      策略映射表 - 线程类型到策略的映射
    • applicationContext

      private final org.springframework.context.ApplicationContext applicationContext
      Spring应用上下文,用于动态获取策略Bean
  • Constructor Details

    • ThreadRoutingContext

      public ThreadRoutingContext(List<AbstractThreadRoutingStrategy> strategies, org.springframework.context.ApplicationContext applicationContext)
      构造函数 - 初始化策略映射
      Parameters:
      strategies - 所有AbstractThreadRoutingStrategy实现类的列表
      applicationContext - Spring应用上下文
  • Method Details

    • createCsThread

      public MessageProtobuf createCsThread(VisitorRequest visitorRequest)
      创建客服线程的主要入口方法
      Parameters:
      visitorRequest - 访客请求信息
      Returns:
      消息协议对象
      Throws:
      IllegalArgumentException - 当线程类型不支持时
    • getStrategy

      public AbstractThreadRoutingStrategy getStrategy(ThreadTypeEnum type)
      获取指定类型的策略
      Parameters:
      type - 线程类型
      Returns:
      对应的策略实现,如果不存在则返回null
    • isSupported

      public boolean isSupported(ThreadTypeEnum type)
      检查是否支持指定的线程类型
      Parameters:
      type - 线程类型
      Returns:
      如果支持返回true,否则返回false
    • getSupportedTypes

      public Set<ThreadTypeEnum> getSupportedTypes()
      获取所有支持的线程类型
      Returns:
      支持的线程类型集合
    • initializeStrategies

      private void initializeStrategies(List<AbstractThreadRoutingStrategy> strategies)
      初始化策略映射
      Parameters:
      strategies - 策略列表
    • registerStrategy

      private void registerStrategy(AbstractThreadRoutingStrategy strategy)
      注册单个策略
      Parameters:
      strategy - 策略实例
    • registerMissingStrategiesByBeanName

      private void registerMissingStrategiesByBeanName()
      通过Bean名称注册遗漏的策略
    • getBeanName

      private String getBeanName(AbstractThreadRoutingStrategy strategy)
      获取策略的Bean名称
      Parameters:
      strategy - 策略实例
      Returns:
      Bean名称,如果获取失败返回类名的首字母小写形式
    • extractTypeFromBeanName

      private ThreadTypeEnum extractTypeFromBeanName(String beanName)
      从Bean名称提取线程类型
      Parameters:
      beanName - Bean名称
      Returns:
      线程类型,如果无法提取则返回null
    • generateBeanName

      private String generateBeanName(ThreadTypeEnum type)
      根据线程类型生成Bean名称
      Parameters:
      type - 线程类型
      Returns:
      Bean名称
    • logRegisteredStrategies

      private void logRegisteredStrategies()
      记录已注册的策略