0%

  • 使用的是iOS Anki
  • 卡片上导入的托福绿宝书
  • 由Gemini帮忙整理
  • 持续背单词中

场景

业务有一个安全随机数方法,需要调用生成数据掉落区间进行结果判定。
最开始业务是在AWS的EC2部署, 后面业务需要迁移,选择了阿里云的ECS,系统是CentOS 8.5

遇到的问题

  • 业务有一个逻辑需要生成安全随机数,但是迁移后业务会在安全随机数卡住没有后续,DEBUG级别日志也没有任何日志报错
    • 数据、代码全部相同,本地IDEA运行,在开发机本机正常,数据库和缓存连接阿里云服务的外网地址,一切正常。
    • 尝试使用Docker image, 现象相同。
    • 查询部分说明是发行版系统在Kernel 4之后的版本关闭了安全随机数,需要重新编译内核才能开启,因此尝试将ECS退回到CentOS 7.9版本,仍未恢复。

场景

数据处理项目, 新数据源的数据不是100%完整, 会由多个topic组合出一条完整数据, 处理后发送到项目。 可是具体完成的topic未知, 为保证尽可能将数据推送,需要一个延迟队列。

遇到的问题

项目没有redis资源, MQ只有发送功能, 需要定期将之前异常的消息进行重试

解决方案

使用Java自带的DelayQueue, 延迟指定时间, 重启丢失问题忽略, 通过其他定时任务手段进行补全

由于是Java本地数据, 因此对象创建需要保证不会过多, 信息量不能过大, 避免OOM问题

前言

之前开发的是Java, 这次希望通过C#编写一些程式,但是两者结构不同, 在此记录

本机环境

Chip: Apple M3 Pro
System: macOS 15.0

安装基本环境

.NET

官方链接: https://dotnet.microsoft.com/zh-cn/download/dotnet
下载选择 macOS Arm64 即可

IDE Rider

官方链接: https://www.jetbrains.com/rider/

项目创建

  1. 创建空文件夹,使用Rider打开, New Solution / 开启Rider, 左侧选择MAUI项目
  2. 设置ProjectName 环境 net8.0 C# MAUI App
  3. 自动生成template文件

场景

我们的一个数据处理项目, 通过接入第三方平台的 WebSocket 进行数据处理。
最初,我们为单个平台构建了一个线程池,直接分配任务。随着项目发展,需要处理更多平台的数据,但硬件资源有限。为了隔离不同平台的业务,我们为每个平台的长链接都创建了一个独立的线程池。

遇到的问题

  • 优先级处理困难
    尽管多个线程池实现了业务隔离,但由于 CPU 调度的非确定性,无法保证高优先级任务的及时处理。
  • 资源争夺
    在同一节点上运行多个服务,且需要保证主数据源的优先处理,这要求我们对线程池进行优化。

解决方案

  • 统一线程池,增强优先级处理
    为了解决上述问题,我们将多个线程池合并为一个。同时,自定义了 PriorityTask 任务类,以便对任务进行优先级排序。
  • 最小化业务侵入
    在实现过程中,我们尽量避免对现有业务逻辑造成大的改动。

场景

  • 项目JDK版本升级, 从JDK8升至JDK 21,Spring Boot设置为3.3.4
  • JDK和Spring Boot在该版本均支持虚拟线程
  • 业务属于接收数据, 数据清洗, 存储数据库逻辑, 较轻量化
  • 开发机服务, 向SIT环境RabbitMQ发送数据

异常

将原本自定义线程池, 直接替换为 ExecutorService executors = Executors.newVirtualThreadPerTaskExecutor() 后,触发了RabbitMQ的 ChannelMax reached异常

场景

  • 多层WebSocket
    使用Spring Boot框架,接入长连接WebSocket-Client,接入第三方平台pushtech,对其进行了封装,需要pom引入使用diffusion。
  • 连接状态管理
    正常情况下,使用@Bean保证WebSocket连接的单例,并定时检查连接状态,进行重连。

异常

  • CLOSED_FAILED状态不可恢复
    这是pushtech平台的限制,意味着一旦进入该状态,当前连接无法恢复。
  • @Bean失效
    Spring的@Bean注解保证了Bean的单例,但在CLOSED_FAILED状态后,Bean的状态可能已经不可恢复,导致后续无法正常工作。

处理

可能有其他更好的处理方式,但我还未找到,所以使用增强单例模式处理, 如果有更好的办法请指导下, 谢谢您

场景

  • JDK 8/21
  • 业务使用三元表达式,获取结果抛出空指针,触发自动拆箱导致的 NPE。