Skip to content

Instantly share code, notes, and snippets.

@silentsudo
Created May 26, 2023 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save silentsudo/87f1f9b26f93beb2809daec8bc6f1358 to your computer and use it in GitHub Desktop.
Save silentsudo/87f1f9b26f93beb2809daec8bc6f1358 to your computer and use it in GitHub Desktop.
JmsConfig
package in.silentsudo.springintegrations.jms;
import jakarta.jms.ConnectionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.jms.ChannelPublishingJmsMessageListener;
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
import org.springframework.integration.jms.dsl.Jms;
import org.springframework.integration.jms.dsl.JmsMessageChannelSpec;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
import org.springframework.messaging.Message;
import java.util.function.Function;
@Slf4j
@Configuration
@EnableJms
public class JmsConfig {
public enum Destination {
requestDestination,
processorDestination,
responseDestination,
}
// @Bean
public JmsMessageChannelSpec<?, ?> requestDestination(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
JmsMessageChannelSpec<?, ?> channel = Jms.channel(connectionFactory);
channel.destination(Destination.requestDestination.name());
return channel;
}
// @Bean
public JmsMessageChannelSpec<?, ?> responseDestination(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
JmsMessageChannelSpec<?, ?> channel = Jms.channel(Destination.responseDestination.name(), connectionFactory);
channel.destination(Destination.responseDestination.name());
return channel;
}
@Bean
public JmsListenerContainerFactory<?> orderFactory(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
final DefaultJmsListenerContainerFactory jmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();
configurer.configure(jmsListenerContainerFactory, connectionFactory);
return jmsListenerContainerFactory;
}
@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
@Bean
@ServiceActivator(inputChannel = "requestDestination")
public Function<Message<?>, Message<?>> theEnd() {
return new Function<Message<?>, Message<?>>() {
@Override
public Message<?> apply(Message<?> messsage) {
log.info("Reached the end: {}", messsage.getPayload());
return messsage;
}
};
}
@Bean
public JmsMessageDrivenEndpoint jmsIn(AbstractMessageListenerContainer container, ChannelPublishingJmsMessageListener listener) {
JmsMessageDrivenEndpoint endpoint = new JmsMessageDrivenEndpoint(container, listener);
return endpoint;
}
@Bean
public AbstractMessageListenerContainer container(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setDestinationName("requestDestination");
return container;
}
@Bean
public ChannelPublishingJmsMessageListener listener() {
ChannelPublishingJmsMessageListener listener = new ChannelPublishingJmsMessageListener();
listener.setRequestChannelName("responseDestination");
return listener;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment