Skip to main content

Advanced Settings

Override Predefined Beans

You can define custom beans to change default behaviors:

You should create and register many fixed response queues for request reply, in this case you can override the MQQueueManagerSetter as following:

    @Bean
@ConditionalOnMissingBean(MQQueueManagerSetter.class)
public MQQueueManagerSetter qmSetter(MQProperties properties, MQQueuesContainer container,
@Value("${response.queue.a}") String queueAName,
@Value("${response.queue.b}") String queueBName) {
return (jmsContext, queue) -> {
log.info("Self assigning Queue Manager to listening queue: {}", queue.toString());
MQUtils.setQMNameIfNotSet(jmsContext, queue);
container.registerQueue(properties.getInputQueue(), queue);
// Register response queue a with queue manager assigned
Queue queueA = jmsContext.createQueue(queueAName);
MQUtils.setQMNameIfNotSet(jmsContext, queueA);
container.registerQueue(queueAName, queueA);
// Register response queue b with queue manager assigned
Queue queueB = jmsContext.createQueue(queueBName);
MQUtils.setQMNameIfNotSet(jmsContext, queueB);
container.registerQueue(queueBName, queueB);
};
}

You can Override any of the next default beans

MQQueueCustomizer which sets some predefined properties to MQQueue

    public MQQueueCustomizer defaultMQQueueCustomizer() {
return queue -> {
if (queue instanceof MQQueue) {
MQQueue customized = (MQQueue) queue;
customized.setProperty(WMQ_TARGET_CLIENT, "1");
customized.setProperty(WMQ_MQMD_READ_ENABLED, "true");
customized.setProperty(WMQ_MQMD_WRITE_ENABLED, "true");
customized.setPutAsyncAllowed(WMQ_PUT_ASYNC_ALLOWED_ENABLED);
customized.setReadAheadAllowed(WMQ_READ_AHEAD_ALLOWED_ENABLED);
}
};
}

MQProducerCustomizer which sets some predefined properties to Producer

    public MQProducerCustomizer defaultMQProducerCustomizer(MQProperties properties) {
return producer -> {
if (properties.getProducerTtl() > 0) {
producer.setTimeToLive(properties.getProducerTtl());
}
};
}

SelectorBuilder, CorrelationExtractor and MQSchedulerProvider which works for request reply patterns in fixed queues with selector

    public SelectorBuilder defaultSelectorBuilder() {
return SelectorBuilder.ofDefaults(); // by JMSCorrelationID
}

public CorrelationExtractor defaultCorrelationExtractor() {
return Message::getJMSCorrelationID;
}

public MQSchedulerProvider defaultMqExecutorService() {
Scheduler scheduler = Schedulers.newBoundedElastic(MAX_THREADS, 2, "selector-pool",
KEEP_ALIVE_SECONDS);
return () -> scheduler;
}

Usual utilities

This class has some utility methods which can help you to do some common tasks