spring-boot - SpringBoot - 如何从 MQ 消息侦听器调用控制器
问题描述
我配置了一个从 IBM MQ 接收消息的 JMS 侦听器。一旦 MQ 中有消息,我想将消息发布到我的休息控制器。
MQ JMS 侦听器
public class MqMessageConsumer {
private Logger log = LoggerFactory.getLogger(MqMessageConsumer.class);
@JmsListener(destination = "${ibm.mq.queue-name}")
public void receiveMessage(String message) {
log.info("There is a message in the queue");
//invoke rest end point
log.info(message);
//invoke rest controller in case of MQ call.
}
}
下面是我的 RestController
@RequestMapping("/users")
public class UsersController {
Logger logger = LoggerFactory.getLogger(UsersController.class);
@PostMapping("/status/checkUser")
public String getStatus() {
return "details";
}
}
知道如何从 MQ 消费者类调用其余控制器吗?
解决方案
您可以添加一个 UsersService 并在消费者和控制器中使用它。一般来说,我们保持控制器尽可能薄,并将业务逻辑放在服务中
代码可以是
@Service
public class UsersService {
public String getStatus() {
return "details";
}
}
@Component
public class MqMessageConsumer {
@Autowired UsersService usersService;
@JmsListener(destination = "${ibm.mq.queue-name}")
public void receiveMessage(String message) {
usersService.getStatus();
}
}
@RequestMapping("/users")
public class UsersController {
@Autowired UsersService service;
@PostMapping("/status/checkUser")
public String getStatus() {
return service.getStatus();
}
}