Как настроить JMS без Spring, я использую Google Guice - PullRequest
0 голосов
/ 09 ноября 2018

Я сталкиваюсь с некоторыми проблемами, пытаясь настроить JMS без весенней загрузки, до того, как я использовал Spring, и все работало нормально, но теперь я больше не буду его использовать, по некоторым причинам я использую Google Guice.

Я настроил этот конфиг класса Jms для добавления необходимых ему вещей

org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
import org.springframework.util.ErrorHandler;
import org.springframework.util.backoff.FixedBackOff;
import javax.jms.ConnectionFactory;

@Configuration
@EnableJms
public class JmsConfig {

    private static final String JMS_TYPE_ID_PROPERTY_NAME = "_type";

    @Bean
    public JmsListenerContainerFactory<?> jmsQueueFactory(
            ConnectionFactory connectionFactory,
            DefaultJmsListenerContainerFactoryConfigurer configurer) {

        log.info("JmsConfig.jmsQueueFactory - (TraceTest1)");
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

        // This provides all Spring Boot's defaults to this factory, including message converter
        configurer.configure(factory, connectionFactory);

        factory.setErrorHandler(new JmsErrorHandler());
        factory.setMessageConverter(jacksonJmsMessageConverter());

        //retry indefinitely every 60 seconds
        factory.setBackOff(new FixedBackOff(60000, FixedBackOff.UNLIMITED_ATTEMPTS));

        return factory;
    }

    public static class JmsErrorHandler implements ErrorHandler {
        private static final Logger log = LoggerFactory.getLogger(JmsErrorHandler.class);
        @Override
        public void handleError(Throwable t) {
            log.error("JMS error", t);
        }
    }

    @Bean
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        log.info("JmsConfig.jacksonJmsMessageConverter - (TraceTest2)");
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName(JMS_TYPE_ID_PROPERTY_NAME);
        return converter;
    }
}

Проблема в том, что теперь я не использую Spring этот класс, и соответствующие компоненты не инициализируются при запуске приложения.

У меня есть другой метод в другом классе, вроде Main, у которого есть «метод start», я хочу абстрагировать его, чтобы вызвать его там без пружины, но я не смог найти реализацию этого вручную с помощью Guice, не могли бы вы, ребята, помочь мне? Спасибо!

...