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

如何使用Quarkus与Apache Camel向WebLogic Server发送队列消息?

Quarkus Qpid JMS + Apache Camel 配置与代码修正

1. 依赖配置(pom.xml)

你引入的依赖是正确的,确保使用与Quarkus版本适配的依赖包:

<dependency>
    <groupId>org.amqphub.quarkus</groupId>
    <artifactId>quarkus-qpid-jms</artifactId>
</dependency>

2. YAML配置文件修正

你的配置格式存在错误,username和password需归属于qpid-jms节点下,且URL的配置键应为url,正确格式如下:

quarkus:
  qpid-jms:
    url: amqp://<你的AMQP服务地址>:<端口>
    username: <你的用户名>
    password: <你的密码>

3. JMSProducer代码修正

代码存在两处明显问题,同时建议完善异常处理逻辑:

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.JMSRuntimeException;
import javax.jms.Session;
import org.apache.camel.Exchange;
import org.apache.camel.Processor; // 修正拼写错误:Proccesor -> Processor
import org.jboss.logging.Logger; // 引入日志依赖,用于异常记录

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

    @Inject
    ConnectionFactory connectionFactory;

    @Override
    public void process(Exchange exchange) throws Exception {
        String messageBody = exchange.getMessage().getBody(String.class);
        try (JMSContext context = connectionFactory.createContext(Session.AUTO_ACKNOWLEDGE)){
            context.createProducer().send(context.createQueue("my_queue"), messageBody);
        } catch (JMSRuntimeException ex) {
            // 禁止空捕获异常,至少记录日志便于排查问题
            LOG.error("发送JMS消息失败", ex);
            throw ex; // 若需要让Camel处理异常可抛出,否则根据业务逻辑自定义处理
        }
    }
}

关键修正点:

  • 修正了Processor的拼写错误(原代码误写为Proccesor)
  • 添加日志记录,避免空异常捕获导致问题无法定位
  • 提取消息体到局部变量,提升代码可读性

4. Apache Camel路由中调用该Bean

在Camel路由里,可通过bean()方法直接调用这个ApplicationScoped注解的Bean,示例如下:

import org.apache.camel.builder.RouteBuilder;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MyCamelRoute extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        // 示例1:定时器触发,调用JMSProducer发送消息
        from("timer:sendJmsTimer?period=5000")
            .setBody(constant("测试JMS消息"))
            .bean(JMSProducer.class);

        // 示例2:从direct组件接收消息后发送
        from("direct:sendJms")
            .bean(JMSProducer.class);
    }
}

额外注意事项

  • 确保你的AMQP服务(如ActiveMQ Artemis、Qpid Broker等)已启动,且my_queue队列已创建(若服务未配置自动创建队列,需手动创建)
  • Quarkus中ConnectionFactory会被框架自动注入,无需手动实例化
  • 若需更灵活的JMS配置(如超时、重试),可参考Quarkus Qpid JMS扩展的配置项添加到YAML文件中

内容的提问来源于stack exchange,提问作者Pedro Sabas Vega

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:56