ActiveMQ发布完成但在队列中看不到任何消息

时间:2018-05-18 03:13:10

标签: java jms activemq spring-jms jmstemplate

更新:我切换到另一个队列,我可以按预期看到我的消息。所以这意味着我尝试的初始队列有一些不同之处。它没有任何消费者。什么可能导致队列在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);
    }
}

0 个答案:

没有答案