Обновление: я переключился на другую очередь и вижу свои сообщения, как и ожидалось.Так что это означает, что в начальной очереди, которую я пробовал, есть что-то другое.У него нет потребителей.Что может привести к тому, что в очереди не будет отображаться никаких сообщений в веб-консоли?
Я пытаюсь опубликовать свой объект Email
в своей очереди ActiveMQ.Мой основной код успешно работает без ошибок, и я получаю вывод «успешно подключен к брокеру».Тем не менее, я проверяю очередь на своем экземпляре веб-сайта ActiveMQ и никогда не появляется никаких сообщений.Для очереди нет потребителей.
Email
не реализует Serializable
, но это не должно быть проблемой, так как я поставляю Jackson JSON MessageConverter
(и даже если была проблема с сериализацией, я думаю, что будет ошибка),Я даже пытался опубликовать простую "test msg"
строку, но все еще не вижу сообщений.
Почему я не вижу сообщения в очереди на веб-сайте после публикации?
@Configuration
@EnableJms
public class EmailMessagingConfiguration {
@Value(ConfigConstants.ACTIVEMQ_EMAIL_BROKER_URL_KEY)
private String brokerUrl;
@Value(ConfigConstants.ACTIVEMQ_EMAIL_MAIN_MESSAGE_QUEUE_KEY)
private String queueName;
@Value(ConfigConstants.ACTIVEMQ_EMAIL_USERNAME_KEY)
private String userName;
@Value(ConfigConstants.ACTIVEMQ_EMAIL_PASSWORD_KEY)
private String password;
@Bean
public ConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerUrl);
connectionFactory.setUserName(userName);
connectionFactory.setPassword(password);
return connectionFactory;
}
@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
return converter;
}
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
jmsTemplate.setMessageConverter(messageConverter);
jmsTemplate.setDefaultDestinationName(queueName);
return jmsTemplate;
}
}
Издатель
@Component
public class EmailPublisher {
@Autowired
JmsTemplate jmsTemplate;
public void publish(final Email email) {
jmsTemplate.convertAndSend(email);
jmsTemplate.convertAndSend("test msg");
}
}
Основной метод (тест)
@SpringBootTest
@Import({EmailMessagingConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class EmailPublisherTest {
@Autowired
private EmailPublisher emailPublisher;
@Test
public void testPublishEmail() {
Email email = new Email();
email.setSubject("foo");
email.setSender(new User("a@gmail.com"));
emailPublisher.publish(email);
}
}