如何为org.springframework.jms.connection.CachingConnectionFactory配置用户名密码
在Apache Camel中为CachingConnectionFactory配置ActiveMQ凭据
核心思路
CachingConnectionFactory仅作为连接缓存的包装器,不负责凭据管理。正确的做法是将用户名密码配置到它所包装的原生ActiveMQConnectionFactory实例上,再将该实例注入CachingConnectionFactory,最后关联到Camel的ActiveMQComponent。
具体实现方式
1. Java代码配置(推荐)
直接创建带凭据的原生ActiveMQ连接工厂,再用CachingConnectionFactory包装,最后绑定到Camel组件:
// 初始化原生ActiveMQ连接工厂并配置凭据 ActiveMQConnectionFactory activeMQConnFactory = new ActiveMQConnectionFactory(); activeMQConnFactory.setBrokerURL("tcp://localhost:61616"); activeMQConnFactory.setUserName("your-username"); activeMQConnFactory.setPassword("your-password"); // 用CachingConnectionFactory包装,配置缓存参数 CachingConnectionFactory cachingConnFactory = new CachingConnectionFactory(activeMQConnFactory); cachingConnFactory.setSessionCacheSize(10); // 缓存会话数 cachingConnFactory.setCacheConsumers(true); // 开启消费者缓存 // 配置Camel的ActiveMQ组件并绑定到上下文 ActiveMQComponent activeMQComponent = new ActiveMQComponent(); activeMQComponent.setConnectionFactory(cachingConnFactory); CamelContext context = new DefaultCamelContext(); context.addComponent("activemq", activeMQComponent);
2. Spring XML配置
如果使用Spring XML,可按如下方式配置:
<!-- 原生ActiveMQ连接工厂,配置凭据 --> <bean id="activeMQConnFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> <property name="userName" value="your-username"/> <property name="password" value="your-password"/> </bean> <!-- 缓存连接工厂,包装原生工厂 --> <bean id="cachingConnFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <constructor-arg ref="activeMQConnFactory"/> <property name="sessionCacheSize" value="10"/> <property name="cacheConsumers" value="true"/> </bean> <!-- Camel的ActiveMQ组件,关联缓存工厂 --> <bean id="activemq" class="org.apache.camel.component.activemq.ActiveMQComponent"> <property name="connectionFactory" ref="cachingConnFactory"/> </bean>
报错原因说明
直接给ActiveMQComponent设置用户名密码时,组件会尝试将凭据赋值给CachingConnectionFactory,但CachingConnectionFactory继承的SingleConnectionFactory并不支持直接配置用户名密码(它完全依赖底层连接工厂的凭据配置),因此会抛出SingleConnectionFactory does not support custom username and password错误。
内容的提问来源于stack exchange,提问作者simonalexander2005
相关产品推荐
相关产品推荐

