package org.springblade.modules.rabbitmq.controller; import lombok.AllArgsConstructor; import org.springblade.modules.rabbitmq.config.MQsender; import org.springblade.modules.rabbitmq.redis.TaskKey; import org.springblade.modules.rabbitmq.redis.RedisService; import org.springblade.modules.rabbitmq.vo.Man; import org.springblade.modules.rabbitmq.vo.Task; import org.springblade.modules.rabbitmq.vo.TaskMessage; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Random; /** * 消息发送 * @author zhongrj */ @RestController @AllArgsConstructor @RequestMapping("/rabbitmq") public class SendMessageController { private static int count = 0; private final MQsender mQsender; private final RedisService redisService; @GetMapping("/sendDirectMessage") public String sendDirectMessage() { String messageData = "test message, hello!"; mQsender.send(messageData); return "ok"; } /** * 模拟抢单 * @return */ @GetMapping("/createTask") public String createTask(Long id ,Integer num) { //创建任务 Task task = new Task(); task.setId(id); task.setNum(num); task.setTaskName("测试"); //将任务数量和对应的id 存入redis redisService.set(TaskKey.getTaskStock,""+task.getId(),task.getNum()); //返回 return "ok"; } /** * 模拟抢单(不同人员同时抢) * @return */ @GetMapping("/testSend") public String testSend(Long id) { //模拟创建人员 Man man = new Man(); man.setId(System.currentTimeMillis() + new Random().nextInt(1000000)); man.setUsername("task"+ count); // 预减库存 long stack = redisService.decr(TaskKey.getTaskStock,""+id); if (stack<0){ return "已结束"; } //入队列 TaskMessage taskMessage = new TaskMessage(); taskMessage.setTaskId(id); taskMessage.setManId(man.getId()); //发送消息 mQsender.sendTaskMessage(taskMessage); //返回 return "ok"; } }