更新:我切换到另一个队列,我可以按预期看到我的消息。所以这意味着我尝试的初始队列有一些不同之处。它没有任何消费者。什么可能导致队列在Web控制台中不显示任何消息?
我正在尝试将我的Email
对象发布到我的ActiveMQ队列。我的主代码成功运行没有错误,我得到了#34;成功连接到经纪人"输出。但是,我检查了我的ActiveMQ网站实例上的队列,并且从来没有任何消息。队列中没有消费者。
Email
没有实现Serializable
,但这应该不是问题,因为我提供了杰克逊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);
}
}