How to consume object of different type from a queue?

71 Views Asked by At

I have a queue with two different Class type say BusinessUser and NormalUser. How can I cast them to their respective type?

@JmsListener(destination = "destination") 
public  void receiveMessageForEmailService(Object object) {
    if (object instanceof BusinessUser) {
        // do something
    }
    if (object instanceof NormalUser) {
        // do something
    }
}

None of the if statements evaluate to true.

Message will be sent from a class having two method which will be something like this:

    public void sendJsonMessage(BusinessUser businessUser){
        jmsTemplate.convertAndSend("destination", businessUser);
    }

    public void sendJsonMessage(NormalUser normalUser){
        jmsTemplate.convertAndSend("destination", normalUser);
    }

Configuration class will be:

@Configuration
@EnableJms
public class JmsConfig {
    public static final String queue = "queueName";

    @Bean
    public ActiveMQConnectionFactory activeMQConnectionFactory(){
        return new ActiveMQConnectionFactory();
    }

    @Bean
    public CachingConnectionFactory cachingConnectionFactory() {
        CachingConnectionFactory cachingConnectionFactory =
                new CachingConnectionFactory(activeMQConnectionFactory());
        cachingConnectionFactory.setSessionCacheSize(10);

        return cachingConnectionFactory;
    }

    @Bean
    public JmsTemplate jmsTemplate(){
        JmsTemplate jmsTemplate = new JmsTemplate(activeMQConnectionFactory());
        jmsTemplate.setMessageConverter(messageConverter());
        return jmsTemplate;
    }

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(activeMQConnectionFactory());
        factory.setMessageConverter(messageConverter());
        return factory;
    }

    @Bean
    public MessageConverter messageConverter(){
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        Map<String, Class<?>> typeIdMappings = new HashMap<String, Class<?>>();
        typeIdMappings.put("businessUser", BusinessUser.class);
        typeIdMappings.put("normalUser", NormalUser.class);
        converter.setTypeIdMappings(typeIdMappings);
        return converter;
    }
}
0

There are 0 best solutions below