Я пытаюсь отправить JMS-сообщение автономному брокеру ActiveMQ в приложении SpringBoot с помощью аннотации @SendTo, однако выполнение завершается без ошибок / исключений, но сообщение не ставится в очередь. Вместо этого, если я использую JmsTemplate (закомментированный в коде), сообщение ставится в очередь. Требуется ли дополнительная настройка для использования @SendTo. Что я здесь делаю не так?
application.properties
spring.activemq.broker-url= tcp://localhost:61616
spring.activemq.user= admin
spring.activemq.password= admin
spring.activemq.pool.enabled= false
Приложение Spring Boot
@SpringBootApplication
public class MyCustomRouterApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MyCustomRouterApplication.class, args);
}
}
Метод обслуживания
@Service
public class NotificationServiceImpl implements NotificationService {
//@Autowired
//JmsTemplate jmsTemplate;
@Override
@SendTo("inboundSyncQueue")
public Map<String, Object> enqueueExchangeNotification(ExchangeNotification notification, String tenantId) throws RuntimeException {
Map<String, Object> jmsMessage = new HashMap<String, Object>();
jmsMessage.put("tenantId", tenantId);
jmsMessage.put("source", ExternalNotificationSource.EXCHANGE);
jmsMessage.put("payload", notification);
//jmsTemplate.convertAndSend("inboundSyncQueue", notification);
return jmsMessage;
}
}
maven pom
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- Required for ActiveMQ JMS Consumer -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-camel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- Required for Guava In-memory Cache -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
<!-- Required for String Utilities -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
</dependency>
</dependencies>




Вместо @sendTo я использовал jmsTemplate у производителя. Ниже приведен метод. jmsTemplate.convertAndSend (destinationQueue, сообщение);
Примечание: это обходной путь.
это то, чем я закончил. Цель использования аннотации - избежать шаблонного кодирования для jmsTemplate и позволить Spring управлять им.