You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus与IBM MQ集成:实现定时消息收发方案咨询

Quarkus集成IBM MQ实现定时消息发送与监听

1. 添加依赖

先给Quarkus项目引入IBM MQ扩展和定时任务依赖,执行命令:

quarkus extension add ibm-mq
quarkus extension add scheduler

或者手动在pom.xml中添加:

<dependency>
    <groupId>io.quarkiverse.ibm-mq</groupId>
    <artifactId>quarkus-ibm-mq</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-scheduler</artifactId>
</dependency>

2. 配置MQ连接与通道

在application.properties里配置MQ连接参数和消息通道映射:

# IBM MQ基础连接信息
quarkus.ibm-mq.queue-manager=QM1
quarkus.ibm-mq.channel=DEV.APP.SVRCONN
quarkus.ibm-mq.hostname=localhost
quarkus.ibm-mq.port=1414
quarkus.ibm-mq.username=admin
quarkus.ibm-mq.password=passw0rd

# 发送端通道配置(对应代码里@Channel的名称)
mp.messaging.outgoing.mq-sender.connector=ibm-mq
mp.messaging.outgoing.mq-sender.destination=DEV.QUEUE.1
mp.messaging.outgoing.mq-sender.destination-type=queue

# 接收端通道配置(对应代码里@Incoming的名称)
mp.messaging.incoming.mq-receiver.connector=ibm-mq
mp.messaging.incoming.mq-receiver.destination=DEV.QUEUE.1
mp.messaging.incoming.mq-receiver.destination-type=queue

3. 定时消息发送端实现

用Quarkus Scheduler定时触发,结合Emitter发送消息到指定通道:

import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Channel;
import org.eclipse.microprofile.reactive.messaging.Emitter;
import io.quarkus.scheduler.Scheduled;
import org.jboss.logging.Logger;

@ApplicationScoped
public class MqSender {
    private static final Logger LOG = Logger.getLogger(MqSender.class);

    @Channel("mq-sender")
    Emitter<String> emitter;

    // 替换X为你需要的间隔秒数,比如5秒就写"*/5 * * * * ?"
    @Scheduled(cron = "*/X * * * * ?")
    public void sendPeriodicMessage() {
        String msg = "Quarkus MQ test message: " + System.currentTimeMillis();
        emitter.send(msg)
                .whenComplete((res, err) -> {
                    if (err != null) {
                        LOG.error("Send message failed", err);
                    } else {
                        LOG.info("Message sent: " + msg);
                    }
                });
    }
}

4. 消息监听接收端实现

用@Incoming标记接收方法,处理并记录日志:

import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Incoming;
import org.jboss.logging.Logger;

@ApplicationScoped
public class MqReceiver {
    private static final Logger LOG = Logger.getLogger(MqReceiver.class);

    @Incoming("mq-receiver")
    public void handleReceivedMessage(String message) {
        LOG.info("Received from IBM MQ: " + message);
        // 这里可以添加自定义消息处理逻辑
    }
}

关键说明

  • 你之前尝试的@Channel+Emitter、@Incoming方案完全正确,这是Quarkus基于MicroProfile Reactive Messaging的标准用法,适配IBM MQ没有问题。
  • 要确保配置文件中的通道名称(比如mq-sender、mq-receiver)和代码里的注解参数完全一致。
  • 提前确认IBM MQ服务正常运行,目标队列(如DEV.QUEUE.1)已创建,配置的用户拥有队列的读写权限。

内容的提问来源于stack exchange,提问作者hunter662

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:51:14