Spring Boot WAR包部署Tomcat,JMS监听器遇线程与内存耗尽问题
配置Spring Boot应用连接TIBCO Message Broker的JMS连接工厂
我来帮你整理这段TIBCO JMS连接工厂的配置代码,同时补充一些生产环境中实用的细节,让你的配置更规范可靠:
格式化后的核心连接工厂配置
@Bean public TibjmsConnectionFactory tibjmsConnectionFactory() { TibjmsConnectionFactory tibjmsConnectionFactory = new TibjmsConnectionFactory("http://172.16.23.1"); tibjmsConnectionFactory.setUsername("abcd"); tibjmsConnectionFactory.setUserPassword("abcd"); // 可选:添加稳定性配置,比如连接重试策略 // tibjmsConnectionFactory.setConnAttemptCount(3); // 连接尝试次数 // tibjmsConnectionFactory.setConnAttemptDelay(2000); // 重试间隔(毫秒) return tibjmsConnectionFactory; }
关键优化与补充说明
- 连接地址注意事项:你当前用的是HTTP协议的Broker地址,如果你的TIBCO Message Broker使用的是原生TIBCO协议(多数生产场景是这个),需要替换为
tcp://172.16.23.1:7222格式(7222是默认端口,具体以你的Broker配置为准)。 - 安全的凭证管理:硬编码用户名密码在代码里是不推荐的,建议通过Spring的
@Value从配置文件读取:
对应的@Value("${tibco.jms.broker-url}") private String brokerUrl; @Value("${tibco.jms.username}") private String jmsUsername; @Value("${tibco.jms.password}") private String jmsPassword; @Bean public TibjmsConnectionFactory tibjmsConnectionFactory() { TibjmsConnectionFactory tibjmsConnectionFactory = new TibjmsConnectionFactory(brokerUrl); tibjmsConnectionFactory.setUsername(jmsUsername); tibjmsConnectionFactory.setUserPassword(jmsPassword); return tibjmsConnectionFactory; }application.properties配置:tibco.jms.broker-url=http://172.16.23.1 tibco.jms.username=abcd tibco.jms.password=abcd - 主题监听的完整配置:要实现JMS主题消息监听,还需要配置监听容器工厂并添加监听方法:
@Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(TibjmsConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(true); // 必须开启,否则默认是队列模式 factory.setConcurrency("3-5"); // 设置监听线程的并发范围,按需调整 return factory; } // 示例主题监听方法 @JmsListener(destination = "your.target.topic", containerFactory = "jmsListenerContainerFactory") public void handleTopicMessage(String messagePayload) { // 这里编写你的消息处理逻辑 log.info("Received message from topic: {}", messagePayload); }
内容的提问来源于stack exchange,提问作者Indraneel Bende
相关产品推荐
相关产品推荐

