SpringBoot - Как я могу вызвать контроллер из прослушивателя сообщений MQ - PullRequest
0 голосов
/ 29 марта 2020

У меня настроен приемник JMS, который получает сообщения от IBM MQ. Как только в MQ появляется сообщение, я хочу отправить сообщение на мой контроллер покоя.

MQ JMS Listener

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?

1 Ответ

1 голос
/ 29 марта 2020

Вы можете добавить UsersService и использовать его как для потребителя, так и для контроллера. В целом, мы сохраняем контроллер максимально тонким и помещаем бизнес-логи c в сервис

Код может быть примерно таким:

@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();
    }
}
...