У меня странная проблема: я не могу отправлять свои сообщения на demoQueue в ActiveMQ, используя только аннотацию @SendTo ("demoQueue"), я пробовал следовать, мне удалось отправить сообщение в очередь с помощью JmsTemplate, но я также прочтите в блоге, что @SendTo сделает это за вас.
Ниже приведен код, который я пробовал, версия, которая не работает.
@Component
public class ProducerTask {
private static final Logger LOG = LoggerFactory.getLogger(ProducerTask.class);
@Scheduled(cron = "0 0/3 * * * *")
@SendTo("demoQueue")
public String pushToQueue() {
String str = "Running scheduled task >> " + ZonedDateTime.now();
LOG.info(str);
return str;
}
}
Версия с JmsTemplate работает нормально.
@Component
public class ProducerTask {
private static final Logger LOG = LoggerFactory.getLogger(ProducerTask.class);
@Autowired
private JmsTemplate jmsTemplate;
@Scheduled(cron = "0 0/3 * * * *")
public String pushToQueue() {
String str = "Running scheduled task >> " + ZonedDateTime.now();
LOG.info(str);
jmsTemplate.setDefaultDestinationName("demoQueue");
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(str);
}
});
// TODO put the logic for consuming in different bean and inject here and call that method here.
return str;
}
}
Объясните, пожалуйста, здесь я запутался. Спасибо.




Вы не можете использовать аннотацию @SendTo как часть какого-либо метода. Он работает в контексте @JmsListener (или другого слушателя, например @KafkaListener), см. Этот Сообщение блога.
Здесь описывается поведение @SentTo. docs.spring.io/spring/docs/current/spring-framework-referenc e /… Он используется только в контексте ответа на сообщение. Чтобы отправить сообщение, вам все равно нужно использовать jmsTemplate. Так что нет, ты не можешь.
@AlexB, я просто хочу убедиться, что @SendToUser нельзя использовать ни с одним @Listener. Это верно?
Я смущен, поскольку они использовали два разных имени очереди с
@JmsListenerи@SendTo, насколько я понял,@JmsListenerпытается прочитать сообщение из очереди, а@SendToотправляет сообщение обратно в очередь в качестве подтверждения, это правильно? Есть ли способ отправить сообщение прямо в очередь (не в качестве подтверждения), используя ту же аннотацию?