Java ActiveMQ发布已完成,但在队列中未看到任何消息
更新:我切换到另一个队列,我可以看到我的消息,正如预期的那样。这意味着我尝试的初始队列有些不同。它没有任何消费者。什么会导致队列在web控制台中不显示任何消息 我正在尝试将我的Java ActiveMQ发布已完成,但在队列中未看到任何消息,java,jms,activemq,spring-jms,jmstemplate,Java,Jms,Activemq,Spring Jms,Jmstemplate,更新:我切换到另一个队列,我可以看到我的消息,正如预期的那样。这意味着我尝试的初始队列有些不同。它没有任何消费者。什么会导致队列在web控制台中不显示任何消息 我正在尝试将我的电子邮件对象发布到我的ActiveMQ队列。我的主代码在没有错误的情况下成功运行,并获得“成功连接到代理”输出。但是,我检查了ActiveMQ网站实例上的队列,没有任何消息。队列中没有使用者 Email没有实现Serializable,但这应该不是问题,因为我提供了一个Jackson JSONMessageConverte
电子邮件对象发布到我的ActiveMQ队列。我的主代码在没有错误的情况下成功运行,并获得“成功连接到代理”输出。但是,我检查了ActiveMQ网站实例上的队列,没有任何消息。队列中没有使用者
Email
没有实现Serializable
,但这应该不是问题,因为我提供了一个Jackson JSONMessageConverter
(即使存在序列化问题,我认为也会有错误)。我甚至尝试发布一个简单的“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");
}
}
主要方法(试验)
只要有MessageConverter,就不需要Serializable。我完全尝试了你的配置,它在我这边起作用。请您提供一个配置常量的示例。没有使用者,因为没有JmsListener侦听您的队列,至少我从这些配置中看不到provided@Chris我说没有消费者,所以我应该能够在web控制台上看到发送到队列的任何消息。我不认为配置常量有什么问题。Terminally说我成功地连接到了代理,之后就没有输出了。我很抱歉误解了你的消费者部分。不管怎样,您是否尝试过在不使用junit测试的情况下运行它?我复制了您的整个代码,并相应地更改了队列配置,它确实能够发送(在队列控制台:8161检查),因此我认为上述代码没有任何问题。
@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);
}
}