rabbitmq同步传输

2021SC@SDUSC

rabbitmq同步传输的使用

rabbitmq同步传输

配置rabbitmq同步传输

    @Bean
    AsyncRabbitTemplate asyncRabbitTemplate(RabbitTemplate rabbitTemplate){
        return new AsyncRabbitTemplate(rabbitTemplate);
    }

同步请求设置

首先注入Templete

@Autowired
private AsyncRabbitTemplate asyncRabbitTemplate;

同步请求传输

  1. 首先判断入参合法性

     //不存在对应题目直接返回
            if (!problemMapper.exists(solve.getProblemId())) {
                return null;
            }
    
  2. 进行参数转换以及数据库入参出参查询校验

    ProblemLimit problemLimit = problemLimitMapper.getProblemLimitById(solve.getProblemId());
            ImmediateMessage immediateMessage = new ImmediateMessage();
            immediateMessage.setInput(customInput);
            JudgeMessage.Code code = new JudgeMessage.Code(solve.getLanguage(), solve.getCode());
            immediateMessage.setCode(code);
            JudgeMessage.JudgeLimit judgeLimit = new JudgeMessage.JudgeLimit();
            if (problemLimit == null) {
                judgeLimit.setMaxCPUTime(2000);
                judgeLimit.setMaxMemory(null);
                judgeLimit.setMaxRealTime(5000);
            } else {
                judgeLimit.setMaxMemory(problemLimit.getMemoryMax());
                judgeLimit.setMaxRealTime(problemLimit.getTimeMax());
            }
            immediateMessage.setJudgeLimit(judgeLimit);
    
  3. 对象序列化处理以及检验

            String json = JSON.toJSONString(immediateMessage);
            System.out.println(json);
    
  4. 同步传输以及校验处理

     String jsonString = future.get();
                ImmediateReplay replay = JSON.parseObject(jsonString, ImmediateReplay.class);
                SolveTestPoint solveTestPoint = new SolveTestPoint();
                solveTestPoint.setDetailOfError(Objects.toString(replay.getDetailOfError()));
                solveTestPoint.setResult(replay.getStdOut());
                if (replay.getRunningDetails() != null) {
                    solveTestPoint.setMemory(replay.getRunningDetails().getMemory());
                    solveTestPoint.setTime(replay.getRunningDetails().getTime());
                }
                return solveTestPoint;
    

    通过 String jsonString = future.get();获取到同步校验

    一个的测试点的检验时间不会超过10s中,用同步传输以及同步回调,可以减轻异步处理服务器的压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值