pom.xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jms</artifactId>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.jakarta.client</artifactId>
<version>9.4.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

docker-compose.yml

services:
ibmmq:
image: icr.io/ibm-messaging/mq:latest
environment:
LICENSE: accept
MQ_QMGR_NAME: QM1
MQ_APP_PASSWORD: pass
ports:
- "1414:1414"
- "9443:9443"

Unchanged — the dev image auto-creates DEV.QUEUE.1, DEV.APP.SVRCONN, and app user app.

application.yml

ibm:
mq:
queue-manager: QM1
channel: DEV.APP.SVRCONN
conn-name: localhost(1414)
user: app
password: pass
queue: DEV.QUEUE.1

MQConfig.java

@Configuration
public class MQConfig {
@Bean
public MQConnectionFactory mqConnectionFactory(
@Value("${ibm.mq.queue-manager}") String queueManager,
@Value("${ibm.mq.channel}") String channel,
@Value("${ibm.mq.conn-name}") String connName,
@Value("${ibm.mq.user}") String user,
@Value("${ibm.mq.password}") String password) throws JMSException {
MQConnectionFactory cf = new MQConnectionFactory();
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager(queueManager);
cf.setChannel(channel);
cf.setConnectionNameList(connName);
cf.setStringProperty(WMQConstants.USERID, user);
cf.setStringProperty(WMQConstants.PASSWORD, password);
return cf;
}
@Bean
public JmsTemplate jmsTemplate(MQConnectionFactory cf,
@Value("${ibm.mq.queue}") String queue) {
JmsTemplate template = new JmsTemplate(cf);
template.setDefaultDestinationName(queue);
return template;
}
}

MessageService.java

@Service
public class MessageService {
private final JmsTemplate jmsTemplate;
public MessageService(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send(String text) {
jmsTemplate.convertAndSend(text);
}
public String receive() {
return (String) jmsTemplate.receiveAndConvert();
}
}

MessageServiceIT.java

@SpringBootTest
class MessageServiceIT {
@Autowired
private MessageService messageService;
@Test
void sendAndReceiveMessage() {
messageService.send("hello mq");
String received = messageService.receive();
assertThat(received).isEqualTo("hello mq");
}
}

Running it

docker compose up -d
# wait ~30s for QM1 to finish starting
mvn test

Hinterlasse einen Kommentar

I’m Iman

Mein Name ist Iman Dabbaghi. Ich arbeite als Senior Software Engineer in der Schweiz. Außerdem interessiere ich mich sehr für gewaltfreie Kommunikation, Bachata-Tanz und Musik sowie fürs die Persönlichkeitsentwicklung.

Ich habe einen Masterabschluss in Informatik von der Universität Freiburg in Deutschland, bin Spring/Java Certified Professional (OCP), Certified Professional for Software Architecture (CPSA-F) und ein lebenslanger Lernender 🎓.

EN:

My name is Iman Dabbaghi. I work as a Senior Software Engineer in Switzerland. I am also very interessted in nonviolent communication, Bachata dance and music and also for personal development.

I hold a masters degree in computer science from the university of Freiburg in Germany, am a Spring / Java Certified Professional (OCP), Certified Software Architecture (CPSA-F) and Life Long Learner🎓

Let’s connect