package com.java110.order.mq; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.pool.PooledConnectionFactory; import org.apache.commons.lang.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.jms.core.JmsTemplate; import javax.jms.ConnectionFactory; /** * Created by wuxw on 2017/4/17. */ @ConfigurationProperties(prefix = "mq.queue.name",locations="classpath:mq/mq.properties") public class MqConfig { @Autowired ConnectionFactory mqConnectionFactory; @Autowired PooledConnectionFactory pooledConnectionFactory; @Value("user") private String userQueueName; @Value("deleteOrderQueue") private String deleteOrderQueueName; @Value("deleteOrderTopic") private String deleteOrderTopicName; private String brokerUrl; private String username; private String password; private String maxConnection; /** * 默认最大链接数 */ private final static int DEFAULT_MAX_CONNECTION = 50; /** * activemq 链接工厂 * 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 * @return */ @Bean(name="mqConnectionFactory") public ConnectionFactory mqConnectionFactory(){ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL(brokerUrl); connectionFactory.setUserName(username); connectionFactory.setPassword(password); return connectionFactory; } /** * 池链接 * ActiveMQ为我们提供了一个PooledConnectionFactory,通过往里面注入一个ActiveMQConnectionFactory 可以用来将Connection、Session和MessageProducer池化,这样可以大大的减少我们的资源消耗。 要依赖于 activemq-pool包 * @return */ @Bean(name="pooledConnectionFactory") public PooledConnectionFactory pooledConnectionFactory(){ PooledConnectionFactory connectionFactory = new PooledConnectionFactory(); connectionFactory.setConnectionFactory(mqConnectionFactory); connectionFactory.setMaxConnections(NumberUtils.isNumber(maxConnection)?NumberUtils.toInt(maxConnection):DEFAULT_MAX_CONNECTION); return connectionFactory; } @Bean(name="deleteOrderQueueJmsTemplate") public JmsTemplate deleteOrderQueueJmsTemplate(){ JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(pooledConnectionFactory); jmsTemplate.setDefaultDestinationName(deleteOrderQueueName); return jmsTemplate; } public String getUserQueueName() { return userQueueName; } public void setUserQueueName(String userQueueName) { this.userQueueName = userQueueName; } public String getDeleteOrderQueueName() { return deleteOrderQueueName; } public void setDeleteOrderQueueName(String deleteOrderQueueName) { this.deleteOrderQueueName = deleteOrderQueueName; } public String getDeleteOrderTopicName() { return deleteOrderTopicName; } public void setDeleteOrderTopicName(String deleteOrderTopicName) { this.deleteOrderTopicName = deleteOrderTopicName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBrokerUrl() { return brokerUrl; } public void setBrokerUrl(String brokerUrl) { this.brokerUrl = brokerUrl; } public ConnectionFactory getMqConnectionFactory() { return mqConnectionFactory; } public void setMqConnectionFactory(ConnectionFactory mqConnectionFactory) { this.mqConnectionFactory = mqConnectionFactory; } public String getMaxConnection() { return maxConnection; } public void setMaxConnection(String maxConnection) { this.maxConnection = maxConnection; } public PooledConnectionFactory getPooledConnectionFactory() { return pooledConnectionFactory; } public void setPooledConnectionFactory(PooledConnectionFactory pooledConnectionFactory) { this.pooledConnectionFactory = pooledConnectionFactory; } }