如何使用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
相关产品推荐
相关产品推荐

