首页 > 解决方案 > 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 消费者类调用其余控制器吗?

标签: spring-bootspring-mvcspring-jms

解决方案


您可以添加一个 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();
    }
}

推荐阅读