Update: I switched to another queue and I can see my messages, as expected. So it means there is something different about the initial queue I tried. It does not have any consumers. What could cause the queue to not show any messages in the web console?
I am trying to publish my Email
object to my ActiveMQ queue. My main code successfully runs without errors, and I get the "successfully connected to broker" output. However, I check the queue on my ActiveMQ website instance and there are never any messages. There are no consumers for the queue.
Email
does not implement Serializable
, but that should not be a problem since I supply a Jackson JSON MessageConverter
(and even if there was a serializing problem, I think there would be an error). I even tried publishing a simple "test msg"
String, but still don't see any messages.
Why can't I see messages in the queue on the website after I publish?
@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;
}
}
Publisher
@Component
public class EmailPublisher {
@Autowired
JmsTemplate jmsTemplate;
public void publish(final Email email) {
jmsTemplate.convertAndSend(email);
jmsTemplate.convertAndSend("test msg");
}
}
Main method (test)
@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);
}
}