Почему Spring JMS Template Sync получает при потере сообщений недолговечного абонента? - PullRequest
0 голосов
/ 08 мая 2019

Я вызываю JMSTemplate.receive () в цикле на недолговечном подписчике. Если я отправлю много сообщений в тему, некоторые сообщения будут потеряны на получателе.Потеря сообщений происходит после возврата JMSTemplate.receive (), но до следующего вызова JMSTemplate.receive ().

Это ожидаемое поведение?или что-то не так со мной?

Я использую следующий код:

@Bean
public ConnectionFactory jmsConnectionFactory() {
    try {
        ConnectionFactory target = (ConnectionFactory) jndiTemplate().lookup("cn=mqtest-cf");
        CachingConnectionFactory factory = new CachingConnectionFactory(target);
        factory.setClientId("testClientId");
        return factory;
    } catch (NamingException e) {
        throw new RuntimeException("Failed to lookup connection factory", e);
    }
}

@Bean
public JmsTemplate jmsTopicTemplate() {
    JmsTemplate t = new JmsTemplate(jmsConnectionFactory());
    t.setDestinationResolver(destinationResolver());
    t.setReceiveTimeout(5000);
    t.setDefaultDestinationName(DEST_TOPIC);
    t.setPubSubDomain(true);
    return t;
}

for(int i=0; i<1000; i++) {
    String msg = (String) jmsTopicTemplate.receiveAndConvert();
    System.out.println(msg);
}
...