Created
May 26, 2023 13:48
-
-
Save silentsudo/87f1f9b26f93beb2809daec8bc6f1358 to your computer and use it in GitHub Desktop.
JmsConfig
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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