Tach zusammen,
ich habe einen JmsListener in welchem ich eine Jms Message senden möchte. Im JmsListener wird erstmal jede Menge Daten verarbeitet und am Ende, wird die Message abgesendet. Hat jemand ne Idee warum das so sein kann? Hat das was mit Transactions zu tun.
ich habe einen JmsListener in welchem ich eine Jms Message senden möchte. Im JmsListener wird erstmal jede Menge Daten verarbeitet und am Ende, wird die Message abgesendet. Hat jemand ne Idee warum das so sein kann? Hat das was mit Transactions zu tun.
Code:
@Autowired
JmsTemplate jmsTemplate;
@Autowired
SenderService senderService;
@JmsListener(destination = "my"-queue", containerFactory = "queueFactory")
public void listen(@Payload MyLoad my, MessageHeaders messageHeaders) throws JMSException {
//Info an ein anderes System dass der Import begann, diese soll sofort gesendt werden
senderService.sendMessage(tenant,my.getName(),UpdateType.RUN_IMPORT_BEGIN, JmsConfig.IMPORT_PROGRESS_QUEUE,jmsTemplate);
//Lädt eine Datei herunter, speicher Daten in die DB
//Nach dem der Prozess beendet ist, wird die Message an den Broker geschickt
}
Code:
@Service
@Slf4j
public class SenderService {
public void sendMessage(String tenant, Object object, UpdateType updateType, String destinationQueue, JmsTemplate jmsTemplate) {
jmsTemplate.convertAndSend(destinationQueue, object, message -> {
message.setStringProperty("updateType", String.valueOf(updateType));
return message;
});
}
}
Code:
@Configuration
@EnableJms
public class JmsConfig {
@Bean
public JmsListenerContainerFactory<?> queueFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setMessageConverter(messageConverter());
factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
factory.setSessionTransacted(true);
factory.setPubSubDomain(false);
return factory;
}
}